2009-07-02 16 views
2

PHPのMySQLi機能は素晴らしいです。PHP Mysqli fetch_assoc

プリペアドステートメントは、クエリにパラメータを挿入するのに最適です。

しかし、ステートメントを使用すると、fetch_assoc機能にアクセスできなくなったようです。すべての結果を手動でバインドする必要があります。これは私のSQLクエリがすべてのフィールドをリストしなければならないことを意味し、次に結果を得るために(bind_resultを使って)すべての変数をあらかじめリストアップする必要があります。これは非常に迷惑になり、時間を浪費することになります。

代替手段はありますか?

おかげ

答えて

1

MySQLiはこれに対処する方法を提供していますが、result_metadata関数を見てください。

私は手間のかからないパラメータ化MySQLiをクエリを許可するようにクラスを書いた - ダウンロードと基本的な使用方法の詳細はこちらです:http://www.robpoyntz.com/blog/?p=191

+0

興味があれば、私は同じインターフェイスを使ってPDOバージョンを作ったので、上記のMySQLiコードの代わりにドロップします。興味深いことに、PDOバージョンはMySQLiバージョンよりも約50%速く走っているようです。ソースコードはこちらから入手できます。http://www.robpoyntz.com/blog/?p=260 –

+0

リンクが壊れています。回答にはもう修正が含まれていません。 – BadPirate

4

はい、それはPDOと呼ばれていますし、一般的にMySQLiのに好適です。通常のフェッチオプションを使用してステートメントを提供し、すべてのパラメーターを明示的にバインドする必要はありません。一般的なクエリは次のようになります。

$stmt = $db->prepare("SELECT * FROM foo WHERE a = ?"); 
$stmt->execute(array($a)); 

$result = $stmt->fetchAll(PDO::FETCH_ASSOC); 

PDOは非常に柔軟なので、他の方法でも使用できます。このマニュアルには多くの素晴らしい例があります。見てみましょう!

+1

素敵な、PDOは準備のためのmysqliのを使用するよりも痛みの少し小さいように見えますステートメント: – Jason