【问题标题】:PHP: number of variables doesn't match number of parameters in prepared statementPHP:变量的数量与准备好的语句中的参数数量不匹配
【发布时间】:2013-07-24 17:46:31
【问题描述】:

我在我的 PHP 脚本中收到以下错误消息;

mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters in prepared statement

但这里是相关代码:

$con = mysqli_connect( $db_url, $db_user, $db_pwd, $db );
$sql = "SELECT * FROM problems WHERE mrn=?";

$stmt = mysqli_prepare( $con, $sql );
mysqli_stmt_bind_param( $stmt, 'i', $sent_mrn );

它将我指向那里的最后一行。我错过了一些非常明显的东西吗? SQL 查询中只有一个参数,我只绑定了一个变量! (我知道有些人会建议我使用 PDO,但我现在必须使用 mysqli)

【问题讨论】:

  • 你在$sent_mrn传递什么
  • 第一行正上方是 $sent_mrn = 123;

标签: php sql mysqli


【解决方案1】:

当使用过程函数(与面向对象相反)时,您必须首先调用mysqli_stmt_init() 来获取语句对象。然后您调用mysqli_prepare 将此语句作为第一个参数,而不是您当前正在执行的连接。此外,除非您仔细检查错误情况,否则您不需要 mysqli_prepare 的返回值。它的返回值不是传递给mysqli_stmt_bind_param,而是从mysqli_stmt_init()返回的语句。

【讨论】:

  • 我以前从未在我的代码中使用过 mysqli_stmt_init() 并且它有效 - 奇怪。
【解决方案2】:
$con = mysqli_connect( $db_url, $db_user, $db_pwd, $db );
$sql = "SELECT * FROM problems WHERE mrn=?";
$stmt = mysqli_prepare($con, $sql); 
$stmt -> bind_param('i', $sent_mrn);

试试这个。

【讨论】:

    猜你喜欢
    • 2016-05-22
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 2014-03-07
    • 2016-01-23
    • 2022-05-27
    相关资源
    最近更新 更多