私はデータベースの抽象化とクエリキャッシングレイヤーとして長年にわたってADOdbを使用してきました。最近は、主にセキュリティのために用意されたステートメントに切り替え、実装されている(または実装されていない)方法が不思議になりました。ADOdbでエミュレートされたプリペアドステートメントを確認するにはどうすればよいですか?
Prepareメソッドのドキュメントからの引用: "最初の配列要素に元のSQL文を含む配列を返します。配列の残りの要素はドライバに依存します。エラーがある場合、またはPrepare()をエミュレートする場合は、元の$ SQL文字列を返します。」
テストでのステートメントの変数:接続のオン
$stmt = $db->Prepare("SELECT * FROM pages WHERE id = ?");
print_r($stmt);
は 『mysqlの』または 『mysqliの』パラメータのみ元のクエリ文字列が返されるで開く - プリペアドステートメントをエミュレートされることを意味、私は推測します。接続は、()(しますprint_rから)を「Pdo_Mysql」リターンで開か:
Array (
[0] => SELECT * FROM pages WHERE id = ?
[1] => PDOStatement Object ([queryString]=>SELECT * FROM pages WHERE id = ?)
)
は、私は本当のプリペアドステートメントの明確な証拠としてこれを取ることができますか?そうでない場合は、サーバー側(クエリログやMySQLProxyなど)を調べるための迅速で汚い方法を知っている人はいませんか?私はドキュメンテーションが言うように、あなたが文を準備しようとした場合
まあ、私は、MySQLでクエリログの設定と異なる接続を試みるテストどんちゃん騒ぎに行ってきました:全体の事件は、私が思ったよりメシエです! pdo_mysqlドライバを持つADOdbはPDO-> prepare()命令を実際に発行します - PDO itsefはプリペアドステートメントをエミュレートします!実際のPSを持つ唯一の方法は、ネイティブのmysqli関数を使用してSELECT *をあきらめているようです。 – djn