0

準備済みステートメントを実行していますが、次のエラーが発生します。何が問題なのか理解できません。同じクエリが PHPMyAdmin で正常に機能しているためです。

コード

$queryConstruct = "
    SELECT id FROM registrations WHERE 
        email = '$email' 
    AND 
        license_type = $license_type";

エラー

致命的なエラー: クエリの準備中に問題が発生しました ( SELECT id FROM registrations WHERE email = 'test1@gmail.com' AND license_type = 0 ) SQL 構文にエラーがあります。**''test1@gmail.com' AND license_type = 0' ** mysqli.lib.php の 2 行目の 444 行付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

4

2 に答える 2

2

それは正確には準備された声明ではありません - ロッティンガムが言ったように。PHP ドキュメントから。

if ($stmt = $mysqli->prepare("SELECT id FROM Registrations WHERE email=? AND license_type=?")) {
    $stmt->bind_param("s", $email);
    $stmt->bind_param("s", $license_type);
    $stmt->execute();
    $stmt->bind_result($id);
    $stmt->fetch();
    printf("%s - %s - %s\n", $id, $email, $license_tpe)
    $stmt->close();
}

ただし、正しく編集したかどうかはわかりません。いずれにせよ、これはあなたがしたことが準備されたステートメントではないことを示唆しているはずです.

クエリで実際の値を連結する代わりに、プレースホルダー(この場合は「?」) に置き換えてから、値でバインドすることに注意してください。このようにして、SQL インジェクションがクエリを操作するのを防ぎ、データを破壊することができます。

さらに、より簡単なアプローチのためにPDOクラスについて学習することを検討してください。

于 2013-09-12T22:45:42.023 に答える