我正在使用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);
答案 0 :(得分:0)
使用参数绑定时,必须记住参数绑定的位置:
第一个查询有效,因为 PHP可以控制绑定过程。秒查询不起作用,因为存储的proc由MYSQL服务器处理,并且PHP不能进行任何绑定。
我试图说清楚,因为很难解释。
答案 1 :(得分:0)