現在、私はブラウザのゲームのログインフォームを作成しようとしています。まず、PHPとMySQLを使用してクエリを実行する通常の手順から始めましたが、すぐにSQLインジェクションのために最適な方法ではないことがわかりました。mysqli_stmt(手続き型)の問題がある
私はstackoverflowによればより安全なstmtを使用することに決めました。
私のコードは、これよりも大きいですが、私はちょうどここに盗聴される部分(私は、コードの残りの部分をデバッグしているし、他のすべては、MySQLサーバへの接続を含め、結構です)
$stmt = mysqli_prepare($conn, "SELECT username FROM users WHERE username='$playername'");
´
//Im pretty sure this is where the bug is
mysqli_stmt_bind_param($stmt, "s", $playername);
//----------------------------------------
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $dbusername);
mysqli_stmt_fetch($stmt);
$row_cnt = mysqli_stmt_num_rows($stmt);
if($row_cnt === 0) {
mysqli_stmt_close($stmt);
$error = true;
$errorid = "There is no player registered with that username.";
echo $errorid;
}
を置きます
私は現時点でテストしているユーザー名 "Syvered"と、ログインフォームでそのユーザー名を使用しようとしているときにデータベースにエントリを作成しました($ playernameはユーザーが入力したユーザー名です)それはまだ "そのユーザ名を持つユーザはいません"と言います。これは、何らかの理由でmysqli_stmt_num_rows($ stmt)が0を返すことを意味します。これは私が理解していないものです。
私は本当にあなたに十分なことを希望しています、あなたの助けを事前に感謝します。私は残念ながら確認したが
質問は役に立ちませんでした:
ありがとうございました!残念ながら、私はあなたが私に言ったことをやったが、それはまだ動作していません。質問のコードを編集しました。 – Syvered
@私は私の答えで言ったように、私の答えの別のを参照してくださいhttp://stackoverflow.com/questions/22252904/check-if-row-exists-with-mysql/22253579#22253579動作し、基本的に同じことを行う。あなたがうまくいかなかった場合は、何かが失敗しています。なぜ失敗したのかについてエラーをチェックする必要があります。 –
@Syveredあなたは元の投稿にロールバックをしなければなりませんでした。なぜなら、あなたは追加の編集としてそれを作ったはずですから。私は、人々が自分自身に言っただろうそれのためにdownvotedされていただろう:* "彼らはプレースホルダーを使用している、なぜ答え?" *。 –