2011-12-27 9 views
3

私はPHP &のMySQLに関する本を読んだ。 prepared statementはバイナリプロトコルを使用しますが、mysqliにはこの機能がありません。 また、私は準備された文がキャッシュされ(実行計画)、mysqli_queryより速く、もちろん安全であることを読んでいますか? 準備された文をいつ使うべきですか?mysqli_queryはいつですか?私は、以下のクエリを持ってprepared statementとmysqli_queryの違いは何ですか?

EDIT
ましょうasumeは:

echo "<table>"; 
echo "<tr class ='tablehead'><td>Name</td><td>Location</td><td>Review</td><td>Image</td> <td>Thumb</td></tr>"; 
while ($row = mysql_fetch_array($query)) 
{  
    echo "<tr>"; 
    echo "<td>" . $row['user_fname'] . "</td>"; 
    echo "<td>" . $row['user_location'] . "</td>"; 
    echo "<td>" . $row['user_review'] . "</td>"; 
    echo "<td>" . $row['user_image'] . "</td>"; 
    echo "<td>" . $row['user_thumb'] . "</td>"; 
    echo "</tr>"; 
} 
echo "</table>"; 

どちらのアプローチが、ここで最高のでしょうか?

答えて

4

プリペアドステートメントにはいくつかのメリットがありますが、SQLインジェクションのバグに対してははるかに確実です。私はこれを最大のメリットと考えています。

パフォーマンスについては、SQL解析、クエリプラン作成、結果フェッチフェーズとクエリ実行コストのコストを考慮する必要があります。後者のI/Oが支配的である(よくあることですが)場合は、準備された停留所やmysqliからほとんど利益を得ることはできません。

ウェブアプリケーションの単純な部分で頻繁に使用されるように、MySQLクエリキャッシュは、の完全一致SQLテキストを使用したクエリに対して機能するので、準備されたクエリはそれを使用しません。私の経験から、これは準備されたクエリのパフォーマンス上の利点を否定する以上のものです。

+0

これらの組み合わせを使用する方がよいでしょうか? – ALH

+0

主に、すべての単一のクエリを分析し、この分析に従って処理する必要があります。もちろん、メンテナンス可能なアプリを開発している間はこれは実用的ではありません。だから基本的に私はあなたのアプリの鳥の視点を分析し、実装のパターンを決定することをお勧めします。 –

+0

もっと正確にはどういう意味ですか?これは、Prepared文が正しく書かれていてもSQLインジェクションが可能であることを意味しますか? – krikara

関連する問題