2011-06-08 25 views
0

私はどのように理解していますか?multi queriesはmysqliで動作します。しかし、私はそれが理解するのは簡単ではないと告白します。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

あなたはそこに準備されたステートメントを使用することはできませんし、高速化も無視できるので、別々のクエリをデバッグしやすくするために行きます。

用意された文を使って1回の呼び出しでそれをやりたければ、PROCEDURE(さらにデバッグするのが難しい...)を作成し、CALL(:param1,:param2);を用意してください。

+0

スピードは最小です。私の前提はSQLインジェクションです。 :) – anvd

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

すべてがここに置き換えることにより、非オブジェクト指向の形式に似ています - と> _や新機能の中に返された値を渡しますが、ここでは、このプロセスは、あなたがそれらのそれぞれでやってどうあるべきか、かなりありますステートメント。 mysqliラッパークラスで抽象化することもできます。

$db->next_result()コールの後、プロセスを再度繰り返すことができます。この変更は、MySQL接続と結果がMySQLiで処理される方法と関係があります。もちろん、mysql_のクエリとリソースに戻ってこの問題を完全に回避することもできます。

特にmulti_queryの場合、クエリはセミコロンで区切ります。単一の文字列です。リンクした例は、結果を処理する方法を示しています。

MySQLi Book @PHP.net

+0

あなたはちょうど私がふりをするように2つではなく、クエリを使用しました。 – anvd

+3

そして今、マルチクエリで? – Wrikken

+0

具体例がお勧めですか?リンクされているように見えないものはありますか? –

関連する問題