0

マルチクエリが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();
4

2 に答える 2

2

そこでは準備済みステートメントを使用できず、高速化も無視できるため、個別のクエリをデバッグしやすい方法を選択してください。

準備されたステートメントを使用して1回の呼び出しで本当に実行したい場合は、PROCEDURE(デバッグがさらに難しい...)を作成し、準備しCALL(:param1,:param2);ます。

于 2011-06-08T17:33:02.077 に答える
-1

私は実際に数日前にこれを理解しました。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 ブック @PHP.net

于 2011-06-08T17:35:57.950 に答える