如果我想通过准备好的stmt每个查询循环更新数据,但为什么会失败。错误消息msg是“必须在新语句准备发生之前获取所有数据”
$link = mysqli_connect("localhost", "admin", "", "test");
if (!$link) {
die('Connect Error: ' . mysqli_connect_error());
}
//field_1 is PK
if ($stmt = mysqli_prepare($link, "SELECT field_1, field_2 FROM table_data")) {
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $col1, $col2);
while (mysqli_stmt_fetch($stmt)) {
$updateC= "update table_data set field_3=? where field_1=?"
if ($stmt2= mysqli_prepare($link, $updateC)) {
mysqli_stmt_execute($stmt2);
$status='test'; //get return value from function
mysqli_stmt_bind_param($stmt2, 'ss', $status, $col1);
}
mysqli_stmt_close($stmt2);
}
mysqli_stmt_close($stmt);
}
mysqli_close($link);
答案 0 :(得分:0)
您正在循环中准备第二个语句,该循环从第一个语句中检索数据。您可以通过创建两个连接来解决此问题。看这篇文章:
http://osdir.com/ml/php.zend.framework.db/2007-07/msg00027.html
您也可以将第一个查询中的所有行读入数组,然后遍历数组,将第二个查询放在该循环中。
可能可能(我还没试过),提前准备第二个声明。在循环中时,将变量绑定到它并执行它。这样的事情(完全未经测试!):
$stmt1 = mysqli_prepare($link, "SELECT field_1, field_2 FROM table_data");
$stmt2= mysqli_prepare($link, "update table_data set field_3=? where field_1=?");
if ($stmt1 && $stmt2) {
mysqli_stmt_execute($stmt1);
mysqli_stmt_bind_result($stmt1, $col1, $col2);
while (mysqli_stmt_fetch($stmt)) {
$status='test'; //get return value from function
mysqli_stmt_bind_param($stmt2, 'ss', $status, $col1);
mysqli_stmt_execute($stmt2);
}
mysqli_stmt_close($stmt2);
mysqli_stmt_close($stmt1);
}