我正在尝试了解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();
感谢
答案 0 :(得分:2)
你不能在那里使用预备语句,加速也可以忽略不计,所以更容易调试单独的查询。
如果你真的想在1次调用预备语句中进行,请创建一个PROCEDURE
(更难以调试......),并准备CALL(:param1,:param2);
。
答案 1 :(得分:0)
我实际上几天前就想到了这一点。迁移到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();
此处的所有内容都与非oo格式类似,方法是替换 - >使用_并将返回的值传递给新函数,但这里的过程几乎就是你应该对每个语句做的事情。您也可以使用mysqli包装类将其抽象出来。
$db->next_result()
电话后,您可以再次重复此过程。此更改与使用MySQLi处理MySQL连接和结果的方式有关。当然,您可以通过切换回mysql_查询和资源来完全避免此问题。
特别是对于multi_query,您可以使用分号在单个字符串中分隔查询。您链接的示例显示了如何处理结果。