データベースに対して SELECT クエリを実行するために準備済みステートメントを使用していますが、SQL 構文の性質が MySQLi で問題を引き起こしています。
準備しようとすると:
SELECT user_id FROM Users WHERE email='?';
エラーが発生します
Warning: mysqli_stmt_bind_param(): Number of variables doesn't match number of parameters in prepared statement
? を引用符で囲むことによってエラーが発生していることはわかっています。しかし問題は、SQL 構文を正しくするためにこれらの引用符が必要なことです。引用符を削除すると、準備されたステートメントは機能しますが、データベースは想定されているものを返しません。
私にできることはありますか、それともインターフェースの制限ですか? それが制限である場合、準備されたステートメントの安全性でこのクエリを実行するにはどうすればよいですか?
完全なコード:
$email = $_POST["email"];
$sql = "SELECT user_id,fname,city,state,zip FROM Users WHERE email='?';";
$types = 's';
$stmt = $db_obj->prepare($sql);
if (!mysqli_stmt_bind_param($stmt, $types, $email)) {
echo "SQL Bind Parameter error.<br/>";
exit;
}
if (!mysqli_stmt_execute($stmt)) {
echo "SQL Statement Execute error.<br/>";
exit;
}
if (!isset($row[0]))
exit ("No such email registered.");