我正在尝试运行以下内容。
<?php
$db = mysqli_connect("localhost","user","pw") or die("Database error");
mysqli_select_db($db, "database");
$agtid = $_POST['level'];
$sql = sprintf("call agent_hier(%d)", $agtid);
$result = mysqli_query($db, $sql) or exit(mysqli_error($db));
if ($result) {
echo "<table border='1'>
<tr><th>id</th>
<th>name</th>
<th>parent_id</th>
<th>parent_name</th>
<th>level</th>
<th>email</th></tr>";
while ($row = mysqli_fetch_assoc($result))
{
$aid = $row["id"];
$sql2 = "SELECT * FROM members WHERE MEMNO = '$aid'";
$result2 = mysqli_query($db,$sql2) or exit(mysqli_error($db));
while ($newArray = mysqli_fetch_array($result2)) {
$fname = $newArray['FNAME'];
$lname = $newArray['LNAME'];
$mi = $newArray['MI'];
$address = $newArray['ADDRESS'];
$city = $newArray['CITY'];
$state = $newArray['STATE'];
$zip = $newArray['ZIP'];
$kdate = $newArray['KDATE'];
$date = abs(strtotime(date('m/d/Y')) - strtotime(date($kdate))) / (60 * 60 * 24);
}
echo sprintf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>",
$row["id"],$row["name"],
$row["parent_id"],$row["parent_name"],
$row["level"],$row["email"]);
}
echo "</table>";
}
mysqli_free_result($result);
mysqli_close($db);
?>
如果我删除以下行:
$aid = $row["agent_id"];
至....
$date = abs(strtotime(date('m/d/Y')) - strtotime(date($kdate))) / (60 * 60 * 24);
}
一切都会正常。如果没有,我得到以下错误:
命令不同步; 您现在不能运行此命令
在研究,我认为这可能是由于多个库MySQLi查询同时运行,其中使用mysqli_multi_query
但在所有样品和通用数据导向似乎并不适用。
有任何想法吗?
MySQL客户端不允许您执行新的查询,在该查询中仍需要从正在进行的查询中获取行。有关常见错误,请参见MySQL文档中的命令不同步。
您可以用来mysqli_store_result()
从外部查询中预提取所有行。这会将它们缓冲在MySQL客户端中,因此从服务器的角度来看,您的应用已获取了完整的结果集。然后,即使在从现在缓冲的外部结果集中提取行的循环中,您也可以执行更多查询。
或者,您mysqli_result::fetch_all()
将完整的结果集作为PHP数组返回,然后可以在该数组上循环。
调用存储过程是一种特殊情况,因为存储过程有可能返回多个结果集,每个结果集可能都有自己的行集。这就是为什么@
a1ex07的答案提到使用mysqli_multi_query()
和循环直到mysqli_next_result()
没有更多结果集。即使您的存储过程只有一个结果集,这也必须满足MySQL协议。
PS:顺便说一句,我看到您正在执行嵌套查询,因为您有代表层次结构的数据。您可能要考虑以不同的方式存储数据,以便可以更轻松地查询它。我做了一个名为“
SQL和PHP的分层数据模型”的演讲。我还在《SQL反模式:避免数据库编程的陷阱》一章中介绍了该主题。
这是mysqli_next_result()
在CodeIgnitor 3.0.3中实现的方法:
在system/database/drivers/mysqli/mysqli_driver.php
变化的第262行
protected function _execute($sql)
{
return $this->conn_id->query($this->_prep_query($sql));
}
对此
protected function _execute($sql)
{
$results = $this->conn_id->query($this->_prep_query($sql));
@mysqli_next_result($this->conn_id); // Fix 'command out of sync' error
return $results;
}
从2.x开始,这一直是一个问题。我刚刚更新到3.x,并且不得不将此破解复制到新版本中。
我正在努力学习同步。根据我所了解的,下面的代码应该给出8000作为最终结果,但是我得到了一个随机的结果,如下所示; 还是得到1293 2214 1403 3214 4214 5214 6224 7037这样的输出有没有人能给我解释一下如何实现同步,这里出了什么问题?
问题内容: 我已经将注册脚本从mysql转换为mysqli。我作为mysql正常工作,但是现在却给我错误 这是我用来注册用户的功能 电子邮件可以很好地发送来自我的阵列的正确数据。但是,没有数据插入到数据库中,并且出现了上面提到的错误。我以前从未遇到过这个错误。 问题答案: 如果 命令不同步; 您现在无法在客户端代码中运行此命令,您以错误的顺序调用了客户端函数。 例如,如果您使用的是mysql_us
问题内容: 我在PHP / MySQLi中使用两个准备好的语句从mysql数据库检索数据。但是,当我运行语句时,出现“命令不同步,您现在不能运行命令”错误。 这是我的代码: 我尝试过的 将准备好的语句移动到两个单独的对象。 使用代码: } //To make sure that no stray result data is left in buffer between the first //a
问题内容: 在我的数据库中,我有一些存储过程。 我想给其中一个打个电话,根据我从此过程中得到的结果,我将确定是否要打第二个天气。 如您所见,我使用的方法 但是仍然在调用其他过程时得到: 这是我对db函数的调用: 问题答案: 每个存储过程至少返回 两个 结果 一个(或多个)实际结果 一个空结果告诉客户没有其他结果。 您必须使用/ 清洁它们。 如果您的过程仅返回一个结果,或者您只想要第一个结果,而不想
我正在做一个cocos2d-x项目。我总是使用cocos命令编译android项目。但是现在这个命令返回了一个错误。android命令不再可用。 我想不出这个问题。为什么这是一个错误?我改变了什么导致了这个问题?我正在开发Mac OS sierra、Cocos2d-x 3.14.1和Android Studio。