绑定变量的数量与预准备语句中的字段数不匹配

时间:2015-06-25 11:27:43

标签: php mysqli mariadb

我有一个返回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

1 个答案:

答案 0 :(得分:0)

存储过程和存储函数的工作方式不同。

如果CheckDataComplete功能,请执行

SELECT CheckDataComplete(?)

然后处理结果集。

无论是函数还是过程,都不需要绑定$ id_out。