多个 mysqli 准备语句不能一起工作


Multiple mysqli prepared statements not working together

自从我上次使用它(几年前)以来,PHP世界发生了很大变化。现在看来我需要重新学习一切,这把我带到了我目前的问题。

/* Create a prepared statement */
$stmt1 = $mysqli -> prepare("SELECT channel FROM channel WHERE barcode=?");
$stmt2 = $mysqli -> prepare("SELECT action FROM action WHERE barcode=?");
$stmt3 = $mysqli -> prepare("SELECT reason FROM reason WHERE barcode=?");
$stmt4 = $mysqli -> prepare("SELECT supplier_name FROM suppliers WHERE barcode=?");
/* Bind parameters */
$stmt1 -> bind_param("s", $_POST['channel']);
$stmt2 -> bind_param("s", $_POST['action']);
$stmt3 -> bind_param("s", $_POST['reason']);
$stmt4 -> bind_param("s", $_POST['supplier']);
/* Execute it */
$stmt1 -> execute();
$stmt2 -> execute();
$stmt3 -> execute();
$stmt4 -> execute();
/* Bind results */
$stmt1 -> bind_result($channel1);
$stmt2 -> bind_result($action1);
$stmt3 -> bind_result($reason1);
$stmt4 -> bind_result($supplier1);
/* Fetch the value */
$stmt1 -> fetch();
$stmt2 -> fetch();
$stmt3 -> fetch();
$stmt4 -> fetch();

echo "Channel ".$channel1."; Action: ".$action1."; Reason: ".$reason1."; Supplier: ".$supplier1;

E一切都很好,但是当它们全部组合在一起时......无。只有第一个语句有效。我做错了什么???

发生这种情况是因为:

  • mysqli_stmt::执行:

    注意: 使用 mysqli_stmt_execute() 时,在执行任何其他查询之前,必须使用 mysqli_stmt_fetch() 函数来获取数据。

  • mysqli_stmt::关闭:

    关闭预准备语句。 mysqli_stmt_close() 还会解除分配语句句柄。如果当前语句具有挂起或未读的结果,此函数将取消它们,以便可以执行下一个查询。

  • 绑定(对于参数和结果)可以在执行之前完成...只是在一个单独的块中排除每个语句的 execute()、fetch() 和 close()。

还要记住使用 trigger_error($mysqli->error); 在使用时检查可能的错误 prepare() .