【问题标题】:PHP mysqli prepare statement not workingPHP mysqli准备语句不起作用
【发布时间】:2013-03-24 02:13:54
【问题描述】:

我正在使用 mysqli prepare 语句来查询具有多个约束的数据库。我已经在我的测试文件中运行了代码,它工作得很好。但是,当我将代码移到我的实时文件时,它会引发以下错误:

PHP 警告:mysqli_stmt::bind_result():绑定变量的数量 与准备好的语句中的字段数不匹配 C:\wamp\www\firecom\firecom.php 第 80 行

PHP 注意:未定义的变量:导致 C:\wamp\www\firecom\firecom.php 第 89 行

两个参数都设置正确,但有什么东西把它扔掉了。

代码:

$query = $mysqli->prepare("SELECT * FROM calls WHERE wcccanumber = ? && county = ?");
$query->bind_param("ss", $wcccanumber, $county);
$query->execute();

$meta = $query->result_metadata();

while ($field = $meta->fetch_field()) {
    $parameters[] = &$row[$field->name];
}

call_user_func_array(array($query, 'bind_result'), $parameters);

while ($query->fetch()) {
    foreach($row as $key => $val) {
        $x[$key] = $val;
    }
    $results[] = $x;
}

print_r($results['0']);

$query var_dump:

object(mysqli_stmt)#27 (10) { ["affected_rows"]=> int(-1) ["insert_id"]=> int(0) ["num_rows"]=> int(0) ["param_count"]=> int(2) ["field_count"]=> int(13) ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["sqlstate"]=> string(5) "00000" ["id"]=> int(1) }

【问题讨论】:

  • 你能在 sql 查询中使用 && 吗?我认为它是 AND 在 WHERE 子句中。尝试 SELECT * FROM 调用 WHERE wcccanumber = ? AND 县 = ?
  • @JeffHawthorne 实际上,&& 是 mysql 中 AND 的同义词:dev.mysql.com/doc/refman/5.0/en/…
  • $results 警告很简单——服务器正在检查未定义的变量,而您的本地变量没有。在while($query->fetch()) 循环之前定义$results,它将消失。
  • 您是否尝试过 var_dump 传递给 bind_param 函数的变量?可能其中一个是空的,并且不像传递的值那样被识别(只是一个疯狂的猜测,但谁知道......)

标签: php sql mysqli prepared-statement


【解决方案1】:

为什么要用 mysqli 折磨自己?
PDO 中,您将不需要这些可怕的代码,而只需一行即可获得结果

$query = $pdo->prepare("SELECT * FROM calls WHERE wcccanumber = ? && county = ?");
$query->execute(array($wcccanumber, $county));
$results = $query->fetchAll();
print_r($results[0]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 2013-07-23
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    相关资源
    最近更新 更多