ここにはいくつかの問題があります...
私の財布の問題: 一部の $$$ がありません (申し訳ありませんが、駄洒落です) :
$sql="select id,
'" . htmlspecialchars($question, ENT_QUOTES) . "',
'" . htmlspecialchars($option1, ENT_QUOTES) . "',
'" . htmlspecialchars($option2, ENT_QUOTES) . "',
'" . htmlspecialchars($option3, ENT_QUOTES) . "',
'" . htmlspecialchars($option4, ENT_QUOTES) . "',
'" . htmlspecialchars($correctAnswer, ENT_QUOTES) . "',
'" . htmlspecialchars($category, ENT_QUOTES) . "',
'" . htmlspecialchars($section, ENT_QUOTES) . "',
'" . htmlspecialchars($chapter, ENT_QUOTES) . "'
from $user order by id";
引用の問題
@bhawin の回答を見て、それを見つけるために +1 を付けてください。
一重引用符'
は文字列を囲むためのもので、バッククォート `` ` は SQL オブジェクトの名前 (列、テーブルなど) を囲むためのものです...
PHP の基本的な mysql 関数の使用
新しい PHP では廃止されました。やってはいけません...楽しみと利益のために PDO を使用してください!
文字列連結を使用してクエリを組み立てる
SQL インジェクション...そのように攻撃されるのは面白くありません。PDOを使うにしても、プリペアドステートメントを正しく使う方法を知らなければならない...
クエリの htmlspecialchars -- なぜですか?
これにより、文字列が HTML ページに安全に表示されるようにエスケープされます。クエリを作成するためではありません...それがmysql_real_escape_string
目的です-しかし、繰り返しますが、試練全体の代わりにPDOを使用してください。
デフォルトのエンコーディングに依存する
文字列を扱う場合は常に、UTF-8 (またはタスクに選択したエンコーディング) を明示的かつ一貫して使用してください。お気に入り:
htmlspecialchars($correctAnswer, ENT_QUOTES, 'UTF-8')
そして最後に
なぜこのように列名を指定しているのですか? 意味がありません。
クエリの結果をサニタイズすることが意図されている場合は、結果を取得した後にサニタイズを行う必要があります...そして突然、htmlspecialchars
意味がわかり始めます!