开发者

multi query with prepared statements

开发者 https://www.devze.com 2023-03-11 18:25 出处:网络
I am trying understand how multi queries work in mysqli. But I confess that is not easy to understand.

I am trying understand how multi queries work in mysqli. But I confess that is not easy to understand.

Basically how I can do these queries in a multi query? The page doesn't talk about prepared statements in multi queries.

($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();


You can't use prepared statements there, and the speedup is also negligible, so go for the easier to debug seperate queries.

If you really want to do it in 1 call with prepared statements, create a PROCEDURE (even more difficult to debug...), and prepare CALL(:param1,:param2);.


I actually just figured this out a few days ago. The move to MySQLi is not a trivial one but ill go ahead and show you the query loop for prepared statements.

$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();

Everything here works similar to the non oo format by replacing -> with _ and passing the returned value into the new function, but this process here is pretty much what you should look to be doing with each of those statements. You can abstract it away with a mysqli wrapper class as well.

After the $db->next_result() call you are able to repeat the process again. This change has to do with the way the MySQL connection and results are handled with MySQLi. You can, of course, avoid this issue entirely by switching back to mysql_ queries and resources.

Specifically for multi_query, you separate your queries with a semicolon, in a single string. The example you linked to shows how to process the results.

MySQLi Book @PHP.net

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号