存储过程会破坏我的查询

时间:2012-09-19 18:41:41

标签: php stored-procedures mysqli

我正在使用PHP和MySQL。

在我的PHP中,我有以下代码,它可以正常工作。

$statement = $db->prepare("SELECT user_id, email_address, username, forename, surname, avatar, website, bio  FROM user WHERE email_address = ? AND password = ?");
$statement->bind_param('ss', $email, $password);
$statement->execute();
$statement->bind_result($rs_userid, $rs_email, $rs_username, $rs_forename, $rs_surname, $rs_avatar, $rs_website, $rs_bio);

如您所见,从结果中绑定了8列。一切都很好。

然后我尝试将其转换为存储过程,其代码如下所示:

$statement = $db->prepare("CALL user_login(?,?)");
$statement->bind_param('ss', $email, $password);
$statement->execute();
$statement->bind_result($rs_userid, $rs_email, $rs_username, $rs_forename, $rs_surname, $rs_avatar, $rs_website, $rs_bio);

,程序如下:

CREATE DEFINER=`root`@`localhost` PROCEDURE `user_login`(IN in_email VARCHAR(45), IN im_password VARCHAR(45))
BEGIN
SELECT user_id, email_address, username, forename, surname, avatar, website, bio FROM user WHERE email_address = in_email AND password = in_password;
END

问题是PHP开始返回此错误: "绑定变量的数量与预备语句中的字段数不匹配"。

如果查询没有改变,那怎么可能呢?有人可以解释一下吗?

注意 在另一个文件中,我有以下代码,一切正常:

$statement = $db->prepare("CALL signup_availability(?,?)");
$statement->bind_param('ss', $array['username'], $array['email']);
$statement->execute();
$statement->bind_result($result);

2 个答案:

答案 0 :(得分:0)

使用参数绑定时,必须记住参数绑定的位置:

  • 在您的第一个查询 PHP 中,将准备好的查询发送到服务器,然后 PHP 绑定参数。
  • 在第二个查询中, MYSQL 构建存储过程,并期望2 IN值。

第一个查询有效,因为 PHP可以控制绑定过程。秒查询不起作用,因为存储的proc由MYSQL服务器处理,并且PHP不能进行任何绑定。

我试图说清楚,因为很难解释。

答案 1 :(得分:0)

我自己发现了这个错误。我的一个IN变量在整个过程中都是不一致的。