具有预备语句的多重查询

问题描述 投票:0回答:2

我正在尝试了解multi queries如何在mysqli中工作。但是我承认这并不容易理解。

基本上,我如何在多查询中执行这些查询?该页面没有讨论多查询中的准备好的语句。

($sql = $db -> prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)"));
$sql -> bind_param('sss', $name, $email, $hash);
$sql -> execute();

($sq = $db -> prepare("INSERT INTO activation_link_password_reset  (activation_link) VALUES (?)"));
$sq -> bind_param('s', $linkHash);
$sq -> execute();
php mysql mysqli prepared-statement mysqli-multi-query
2个回答
2
投票

您不能在此处使用准备好的语句,并且加速也可以忽略不计,因此请更轻松地调试单独的查询。

如果您真的想在1次调用中使用预准备语句来执行此操作,请创建一个PROCEDURE(甚至更难以调试...,然后准备PROCEDURE


-1
投票

我实际上是几天前才想到的。迁移到MySQLi并不是一件容易的事,但不妨继续向您展示准备好的语句的查询循环。

CALL(:param1,:param2);

这里的所有工作都类似于非oo格式,方法是用_替换->并将返回的值传递到新函数中,但是在此过程中,您几乎应该对每个语句都这样做。您也可以使用mysqli包装器类将其抽象。

$db = new mysqli(...) $statement = $db->prepare('SELECT count(*) as [hitchhikers] FROM `T_Users` WHERE `id` > ? AND `signin` like ?'); $statement->bind_param("ss", 42, '%adams'); if ($statement->execute()) { $statement->store_result(); $statement->bind_result($hitchhikers); $statement->fetch(); // do something with hitchhikers here } else { // there was a problem with the execution, check $db->error } $statement->close(); $db->next_result(); 调用之后,您可以再次重复该过程。这种变化与MySQLi处理MySQL连接和结果的方式有关。当然,您可以切换回mysql_查询和资源,从而完全避免此问题。

特别是对于multi_query,您可以在单个字符串中用分号分隔查询。链接到的示例显示了如何处理结果。

$db->next_result()

© www.soinside.com 2019 - 2024. All rights reserved.