调用未定义的方法 mysqli_stmt::next_result()
Call to undefined method mysqli_stmt::next_result()
我正在尝试遍历 PHP 中通过准备好的语句调用的存储过程。希望这不是不可能的。这是我的 PHP 代码:
$database = new mysqli($server, $user, $pass, $db);
$stmt = $database->prepare("CALL thisShouldReturnEightResultSets (?)");
$stmt->bind_param("i", $id);
$stmt->execute();
do {
if ($res = $stmt->bind_result($myvar)) {
$stmt->fetch();
echo "*" . $myvar . "<br/>";
} else {
if ($stmt->errno) {
echo "Store failed: (" . $stmt->errno . ") " . $stmt->error;
}
}
} while ($stmt->next_result());
应该像这样打印:
* 4
* 16
* 7
etc...
... 然后在用完结果集后退出。相反,我得到:
* 4
Fatal error: Call to undefined method mysqli_stmt::next_result()
起初我尝试了get_result而不是bind_result,但那是错误的。根据 this 我发现我没有安装 mysqlnd 驱动程序。我用 bind_result 解决了这个问题。现在我需要解决 next_result 我猜它也是 mysqlnd 驱动程序的一部分。我在这里有什么选择?技术说明:
PHP Version 5.3.2-1ubuntu4.11
谢谢。
bindResult 不喜欢多个结果。
使用 get_result() 然后 fetch_assoc 并存储在数组中,
然后使用 foreach 循环输出结果。
$res = $stmt->get_result();
$array[];
while($x = $res->fetch_assoc()){
$array[]=$x;
}
我认为您不能使用准备好的语句来执行此操作,因为您没有 MYSQLND 驱动程序。你必须用老式的方式来转义。
$id = $database->real_escape_string($id);
if ($database->multi_query("CALL thisShouldReturnEightResultSets ('$id')")) {
do {
if ($result = $database->store_result()) {
while ($row = $result->fetch_row()) {
echo "*" . $row[0] . "<br/>";
}
}
} while ($database->next_result());
}
我正在尝试遍历 PHP 中通过准备好的语句调用的存储过程。希望这不是不可能的。这是我的 PHP 代码:
$database = new mysqli($server, $user, $pass, $db);
$stmt = $database->prepare("CALL thisShouldReturnEightResultSets (?)");
$stmt->bind_param("i", $id);
$stmt->execute();
do {
if ($res = $stmt->bind_result($myvar)) {
$stmt->fetch();
echo "*" . $myvar . "<br/>";
} else {
if ($stmt->errno) {
echo "Store failed: (" . $stmt->errno . ") " . $stmt->error;
}
}
} while ($stmt->next_result());
应该像这样打印:
* 4
* 16
* 7
etc...
... 然后在用完结果集后退出。相反,我得到:
* 4
Fatal error: Call to undefined method mysqli_stmt::next_result()
起初我尝试了get_result而不是bind_result,但那是错误的。根据 this 我发现我没有安装 mysqlnd 驱动程序。我用 bind_result 解决了这个问题。现在我需要解决 next_result 我猜它也是 mysqlnd 驱动程序的一部分。我在这里有什么选择?技术说明:
PHP Version 5.3.2-1ubuntu4.11
谢谢。
bindResult 不喜欢多个结果。
使用 get_result() 然后 fetch_assoc 并存储在数组中, 然后使用 foreach 循环输出结果。
$res = $stmt->get_result();
$array[];
while($x = $res->fetch_assoc()){
$array[]=$x;
}
我认为您不能使用准备好的语句来执行此操作,因为您没有 MYSQLND 驱动程序。你必须用老式的方式来转义。
$id = $database->real_escape_string($id);
if ($database->multi_query("CALL thisShouldReturnEightResultSets ('$id')")) {
do {
if ($result = $database->store_result()) {
while ($row = $result->fetch_row()) {
echo "*" . $row[0] . "<br/>";
}
}
} while ($database->next_result());
}