-1

このコードの何が問題なのですか...?? 次のコードでmysqlからデータを取得すると、エラーが発生します。

$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";
4

4 に答える 4

4

ここにはいくつかの問題があります...

私の財布の問題: 一部の $$$ がありません (申し訳ありませんが、駄洒落です) :

$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意味がわかり始めます!

于 2013-08-24T11:26:51.690 に答える
2

列名をエスケープしようとしていますか? データベースに既に存在する列名や値ではなく、データベースに挿入された値をエスケープします。

mysqlのテーブルから選択するhtmlspecialchars? htmlspecialchars は sql ではなく html です。それらを選択するときではなく、データベースに挿入するときに値をエスケープします。それらはすでにデータベースにあるのに、なぜそれらをエスケープするのですか?

これを試して

     $sql="select id,
    question,
    option1,
    option2,
    option3, 
    option4, 
    correctAnswer,
     category, 
      section, 
     chapter 
       from $user order by id";
于 2013-08-24T11:32:35.340 に答える
1
$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";

クエリで ' を ` に変更しました

于 2013-08-24T11:32:32.073 に答える