【问题标题】:Simple select query gives error简单的选择查询给出错误
【发布时间】:2015-06-09 07:54:48
【问题描述】:

有谁知道为什么我会在这样一个简单的查询中出现两个错误?错误信息是:

警告:mysqli::prepare(): 无法在第 503 行的 (...)/functions.php 中获取 mysqli

致命错误:在第 504 行 (...)functions.php 中的 null 上调用成员函数 bind_param()

$query_select = ("SELECT * FROM vat WHERE vat_status = ?");
$stmt = $mysqli->prepare($query_select); // line 503
$stmt->bind_param("s", $vat_status); 
$stmt->execute();
$stmt->store_result();
$count = $stmt->num_rows();

$stmt->bind_result ($vat_id          ,
                    $vat_rate        ,
                    $vat_account     ,
                    $vat_description ,
                    $vat_status      ,
                    $vat_timestamp   ); 

【问题讨论】:

  • 首先,打开错误报告并在该行添加die($mysqli->error) 以找出答案,这里是如何使用SELECT *->bind_param php.net/manual/en/mysqli-stmt.bind-result.php#85470 或只使用@987654326 的方法@,少麻烦
  • 我建议使用错误日志文件而不是可见的错误报告。但总的来说,您确实必须在代码中添加错误处理,这有助于找出失败的原因。
  • prepared 声明抱怨“不太好”。无论从那里发生什么都不会导致“可靠”的结果。这发生在 500+ 行的事实是“有趣的”。您能否收集所有相关信息并将此查询与所需数据放在一个只运行该查询的文件中?要调试它,我会 var_dump - $stmt, $vat_status。我还会预定义所有输出变量。

标签: php mysqli


【解决方案1】:

问题是我触发了一个 UPDATE 语句,然后是一个 SELECT 语句,它们都使用了$stmt 变量。这就是问题所在。

现在我用

mysqli_stmt_close($stmt); 

真正关闭 $stmt 并释放结果,所以我可以在更新后触发 select 语句。

【讨论】:

  • 但实际上,我还有一个问题,你到底为什么要使用 $stmt->close();而不是 mysqli_stmt_close($stmt_insert);?
猜你喜欢
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 2020-10-14
  • 2016-04-13
  • 2012-10-03
相关资源
最近更新 更多