我尝试从数据库中填充两个下拉列表,所以我尝试进行一个查询并填充第一个下拉列表,然后尝试进行第二个查询并填充最后一个下拉列表。
它将第二个$rows返回为false,但第一个是ok,我做错了什么?
<?php
$db = new Db();
$rows = $db -> select("call Store1(0,0);");
var_dump($rows);
$rows = $db -> select("call Store1(0,0);");
var_dump($rows);
?>
以下是我的两个功能:
public function select($query) {
$rows = array();
$result = $this -> query($query);
if($result === false)
{
return false;
}
while ($row = $result -> fetch_assoc())
{
$rows[] = $row;
}
return $rows;
}
public function query($query) {
$connection = $this -> connect();
$result = $connection -> query($query);
return $result;
}
1条答案
按热度按时间0sgqnhkj1#
我的猜测(这只是猜测…)
第一个结果集(游标)仍处于打开状态。光标尚未关闭(myabe当前结果集中还有更多尚未提取的行。或者没有通过发布收盘价被放弃。
尝试准备(执行)第二条语句(在同一个数据库连接上)会导致错误。
(阿娇,这只是猜测,绝不是对问题的实际诊断。)
我的建议是启用错误报告。如果sql语句执行返回false,那么我们需要从数据库中检索错误代码和错误消息。或者考虑启用pdo异常,以便抛出错误以便我们可以看到它们(使用mysqli可能也有类似的功能。)
返回false是告诉我们发生了错误,但它没有告诉我们错误是什么(如果没有这些,就很难知道要解决什么问题。)
在某些情况下,可能是我们不关心错误是什么。在这种情况下,很明显我们很在乎。我们的工作是找出错误所在。。。没有诊断出错误的根本原因,任何试图开处方的行为都将是“试试这个”和“试试那个”在黑暗中不瞄准射击,希望击中什么东西。
推荐阅读:
https://ericlippert.com/2014/03/05/how-to-debug-small-programs/