我有一个返回SELECT COUNT的简单存储过程。如果我从命令行运行存储过程,我会得到计数。如果我尝试使用以下方法通过PHP调用存储过程:
$id = $_REQUEST["id"];
//Open a new connection to the MySQL server
$mysqli = new mysqli('localhost','mydb','somepass','thetable');
//Output any connection error
if ($mysqli->connect_error) {
die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}
$stmt = $mysqli->prepare("CALL CheckDataComplete(?)");
$stmt->bind_param('s', $id);
$stmt->execute();
$id_out = NULL;
$stmt->bind_result($id_out);
$stmt->fetch();
echo "Result = $id_out\n";
?>
我明白了:
Number of bind variables doesn't match number of fields in prepared statement
但我绑定了一个结果变量,而我的SP只返回1
修改 发生错误的行是:
$stmt->bind_result($id_out);
存储过程如下所示:
CREATE PROCEDURE CheckDataComplete(IN appid bigint)
BEGIN
SELECT COUNT(customer_id)
FROM MyTable
WHERE data_txt IS NOT NULL AND customer_id = appid;
END
答案 0 :(得分:0)
存储过程和存储函数的工作方式不同。
如果CheckDataComplete
是功能,请执行
SELECT CheckDataComplete(?)
然后处理结果集。
无论是函数还是过程,都不需要绑定$ id_out。