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

时间:2014-12-23 16:04:11

标签: php mysql forms select mysqli

自从我上次使用它(几年前)以来,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;

Eeverything一个接一个地工作得很好,但当它全部合并时......没有。只有第一个声明才有效。我做错了什么???

1 个答案:

答案 0 :(得分:1)

这是因为:

  • mysqli_stmt::execute

      

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

  • mysqli_stmt::close

      

    关闭准备好的声明。 mysqli_stmt_close()也释放语句句柄。如果当前语句具有挂起或未读结果,则此函数将取消它们,以便可以执行下一个查询。

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

另请注意在使用trigger_error($mysqli->error);时使用prepare()检查可能的错误。