Mysqli - 使用预准备语句进行多查询

时间:2011-06-08 17:27:35

标签: mysql database mysqli mysqli-multi-query

我正在尝试了解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();

感谢

2 个答案:

答案 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,您可以使用分号在单个字符串中分隔查询。您链接的示例显示了如何处理结果。

MySQLi Book @PHP.net