【问题标题】:MySQLi multiple conditions, what's wrongMySQLi多重条件,怎么回事
【发布时间】:2012-01-21 19:58:14
【问题描述】:

我正在尝试如下准备语句:

    $stmt = $mysqli->prepare("SELECT COUNT(*) FROM table WHERE from = '?' && to = '?' LIMIT 1");
    $stmt->bind_param('ii', $fromId, $toId);
    $stmt->execute();
    $stmt->bind_result($db_offeredAlready);
    $stmt->fetch();
    $stmt->close();

我收到以下错误:

 Fatal error: Call to a member function bind_param() on a non-object in /path/to/script.php on line 97

添加 ` 和 ' 给我

    $stmt = $mysqli->prepare("SELECT COUNT(*) FROM `table` WHERE `from` = '?' && `to` = '?' LIMIT 1");

还有以下

 Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of variables doesn't match number of parameters in prepared statement in /path/to/script.php on line 97

显然 BIND 变量的数量与 ?分数。我尝试了添加和删除 ` 和 ' 的所有组合,但无济于事。这个准备好的声明有什么问题?我可以在一个条件下执行 SELECT,但它会抱怨多个条件。

【问题讨论】:

  • 对于第一个示例,您不能有一个名为“from”的列,因为 mysql 将其解释为语句的一部分。使用反勾号可以让你做到这一点。它现在只是解决绑定部分不起作用的原因。

标签: php mysql mysqli prepared-statement


【解决方案1】:

不需要引用占位符 (?)。

$stmt = $mysqli->prepare("SELECT COUNT(*) FROM `table` WHERE `from` = ? && `to` = ? LIMIT 1");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 2011-06-14
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    相关资源
    最近更新 更多