0

私は一種のブログをいじっています。エラーが発生し、次のように言うと:

私のPHPは次のとおりです。

    $query = "INSERT INTO articles (articleTitle, articleType, articleText, userID)
        VALUES('$articleTitle', '$articleType', '$articleText', '$userID')";

    $result = mysql_query($query);

    var_dump($articleTitle);
    var_dump($articleType);
    var_dump($articleText);
    var_dump($userID);

    var_dump($result);

    echo mysql_error();

私の結果はこれです:

    string 'New News! (Sounds like noo noo's)' (length=33)
    string 'News' (length=4)
    string 'NEWS is here! This is Michael Bender reporting on the new news that we now have news! Isn't that exciting news?' (length=111)
    string '1' (length=1)
    boolean false

SQL 構文にエラーがあります。's)'、'News'、'NEWS is here! の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。これは、2行目の新しいニュースについて報告しているMichael Benderです

では、なぜ mysql は私のクエリを受け入れないのでしょうか? ありがとう!

4

3 に答える 3

3

mysql_query に渡されたすべての変数を でエスケープする必要がありますmysql_real_escape_string。また、PDO または mysqli を使用することもできます。

于 2012-12-07T18:08:19.797 に答える
1

クエリを壊すものは次のとおりです。

string '新しいニュース! (noo noo's のように聞こえます)' (長さ = 33)

一重引用符'

クエリで値を使用する前に、値をエスケープする必要があります。または、 Sql インジェクションの犠牲者になります

例:

$query = "INSERT INTO articles (articleTitle, articleType, articleText, userID)
        VALUES('%s', '%s', '%s', %d)";

$query = sprintf($query,
   mysql_real_escape_string($articleTitle),
   mysql_real_escape_string($articleType), 
   mysql_real_escape_string($articleText), 
   (int) $userID); // assuming your userId is an integer
于 2012-12-07T18:08:33.203 に答える
0

データに mysql_real_escape_string() を使用すると、特殊文字が含まれているためにクエリがクラッシュするのを防ぐことができます。

于 2012-12-07T18:11:51.500 に答える