0

重複の可能性:
PHP で SQL クエリ内の単一引用符を処理するにはどうすればよいですか?

こんにちは、アプリケーションに使用される小さなスクリプトがあり、質問の回答をデータベースに保存します。スクリプトを以下に示します。

while(list($QKey,$QVal) = each($AppQuestions)) {
    $result2= mysql_query("
         INSERT INTO forum_app_answers (AID, AppID, Question, Answer)".
         " VALUES (NULL, '$AppID', '$Questions[$QKey]', '$QVal')"
     ) or die(mysql_error());

ここでの問題は、誰かが答えに ' 文字を書いた場合、データが保存されないことです。簡単な書き方なら大丈夫です。問題は、回答に ' が含まれている場合のみです。どんな助けでも大歓迎ですtx

次のエラーが発生します。SQL 構文にエラーがあります。Near の GF を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。チャネル サービス')' 行 1 で

4

3 に答える 3

2

準備済みステートメントを使用します。PDO を検索し、準備済みステートメントを使用します。

mysql_廃止されました。

と接続した後$dbh = new PDO()

    $sql = 'sql';
    $stmt = $dbh->prepare($sql);
    $stmt->execute($params);
于 2013-02-02T21:52:54.873 に答える
1

以下をせよ:

$QVal = $mysqli->real_escape_string($QVal);
$query = "INSERT INTO forum_app_answers (AID, AppID, Question, Answer) 
          VALUES (NULL, '$AppID', '$Questions[$QKey]', '$QVal')";
//  $mysqli is previously defined
$mysqli->query($query);
if ($mysqli->errno !=0){
    printf("you have an error in your query %s", $mysqli->error);
}
于 2013-02-02T21:56:00.723 に答える
0

あなたは試すことができます:

while(list($QKey,$QVal) = each($AppQuestions)) {
    $result2= mysql_query("
       INSERT INTO forum_app_answers
           (AID, AppID, Question, Answer)". " 
       VALUES (
           NULL,
           '$AppID',
           '$Questions[$QKey]',
            '". mysql_real_escape_string($QVal). "')
      ") or die(mysql_error());

mysql_real_escape_string() を使用しないと、スクリプトにも大きなセキュリティ上の問題があります。

于 2013-02-02T21:55:56.667 に答える