ユーザーが自分のサイトに登録してログインできるようにするスクリプトを書いています。SQLインジェクションを防ぐために、PDOの準備と実行を使用しています。
次のようにクエリを手動で作成します。
$a_query = "SELECT COUNT(*) FROM ". $login_table . "
WHERE `username` = ". $my_username . "
AND `password = " . $my_hash ;
$result_1 = $db->prepare($a_query);
$result_1->execute();
しかし、このように準備を正しく使用しようとすると、そうではありません:
$a_query = "SELECT COUNT(*) FROM :table
WHERE `username` = :name
AND `password = :pass ;"
$result_1 = $db->prepare($a_query);
$result_1->bindParam(":table", $login_table);
$result_1->bindParam(":name", $my_username);
$result_1->bindParam(":pass", $my_hash);
$result_1->execute();
$result_1->errorInfo[2] から取得したエラー メッセージは次のとおりです。
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax
to use near ''customerlogin' WHERE `username` = 'guest' AND `password`
= 'qwerty' at line 1
ご覧のとおり、prepare() はクエリを mysql に送信する前に、不思議なことにクエリの最初の部分を切り取っています。
これを修正する理由と方法を誰かに説明してもらえますか?