現在、MySQLi をいじって、すべてがどのように機能するかを理解しようとしています。私の現在のプロジェクトでは、すべてが正しいことを確認し、コードをすばやくデバッグするために、コーディング中に常にクエリ文字列をエコーアウトするのが好きです。しかし...準備されたMySQLiステートメントでこれを行うにはどうすればよいですか?
例:
$id = 1;
$baz = 'something';
if ($stmt = $mysqli->prepare("SELECT foo FROM bar WHERE id=? AND baz=?")) {
$stmt->bind_param('is',$id,$baz);
// how to preview this prepared query before acutally executing it?
// $stmt->execute();
}
私はこのリストを調べてきました(http://www.php.net/mysqli ) しかし、運はありません。
編集
まあ、MySQLi 内からそれが不可能な場合は、おそらく次のようなものに固執します。
function preparedQuery($sql,$params) {
for ($i=0; $i<count($params); $i++) {
$sql = preg_replace('/\?/',$params[$i],$sql,1);
}
return $sql;
}
$id = 1;
$baz = 'something';
$sql = "SELECT foo FROM bar WHERE id=? AND baz=?";
echo preparedQuery($sql,array($id,$baz));
// outputs: SELECT foo FROM bar WHERE id=1 AND baz=something
明らかに完璧にはほど遠いです。これはまだかなり冗長であるためです (これは私が防止したかったことです)。また、MySQLi によってデータがどのように処理されているかについてのアイデアも得られません。しかし、この方法で、すべてのデータが存在し、適切な場所にあるかどうかをすばやく確認できると思います。変数を手動でクエリに組み込むよりも、時間を節約できます。