Mysqli - мультизапрос с подготовленными отчетами - PullRequest
0 голосов
/ 08 июня 2011

Я пытаюсь понять, как несколько запросов работают в 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 ]

2 голосов
/ 08 июня 2011

Вы не можете использовать подготовленные операторы там, и ускорение также незначительно, поэтому перейдите к более простым для отладки отдельных запросов.

Если вы действительно хотите сделать это за 1 вызов с подготовленными утверждениями, создайте PROCEDURE (еще труднее отладить ...) и подготовьте CALL(:param1,:param2);.

0 голосов
/ 08 июня 2011

Я на самом деле только что понял это несколько дней назад.Переход на 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() вы можете повторить процесс еще раз.Это изменение связано с тем, как MySQL-соединение и результаты обрабатываются с помощью MySQLi.Конечно, вы можете полностью избежать этой проблемы, переключившись обратно на запросы и ресурсы mysql_.

Специально для multi_query ваши запросы разделяются точкой с запятой в одной строке.В приведенном вами примере показано, как обрабатывать результаты.

MySQLi Book @ PHP.net

...