-1

ブログ投稿用のフォームがあり、一重引用符 (たとえば、それ) があると SQL 挿入コードが壊れます。mysql_real_escape_string を使用してみました:

$Description = mysql_real_escape_string($_POST['Description']);

しかし、これはうまくいきません。htmlspecialchars() も使用してみましたが、これらの投稿では、リンクと画像を追加するために HTML コードを使用できる必要があります。

ガイドのように SQL コードを更新しましたが、それでも機能しませんでした。次に、一重引用符がない場合は更新できるので、コードは機能しますが、一重引用符が多くの問題を引き起こしています

        $SQL = "UPDATE Posts SET Title = '$Title',LinkTitle = '$LinkTitle',MainPicture = '$MainPic',Description ='".$Description."',Maintext = '$Main',Type = '$SubCategory',Featured = '$Featured'
    ,category = '$Category',thumbnail='$thumb'
    WHERE ID = '$id'";

修理

解決策を提供してくれた Gaucho に感謝します。問題は、mysqli を使用してデータベースに接続していたことです。接続コードを通常の mysql_connect に変更すると、問題が修正されました。

4

3 に答える 3

0

このコードをデータベース名とパスワードとともに使用し、取得しているエラーを報告してください。

mysql_real_escape_stringは、私の場合は正常に機能しているため、クエリの問題ではありません。PHPとMySQLのバージョンも教えてください。

 <?php
     // Connect to your database
     mysql_connect("localhost","yourDBuserName","yourDBpassword");

     // Specify database
     mysql_select_db("yourDBname") or die;

     //Build SQL query
     $Description = mysql_real_escape_string("that's amore");
     $query = "select * from Posts where Description ='" . $Description . "'";
     $queryResult=mysql_query($query);
     if (!$queryResult) {
         $message  = 'Invalid query: ' . mysql_error() . "\n";
         $message .= 'Whole query: ' . $query;
         die($message);
     }
     die ($queryResult);
 ?>

コードをデバッグするためにPhpEdを使用することもお勧めします。注:私のサンプルのmysql_real_escape_stringの結果は、「that\\'samore」です。Invalid ..で始まらないエコーされた文字列は、クエリが正常に実行されていることを意味します。

注2:これはサーバーに接続するための正しい方法です。

mySqliを使用して接続する場合は、間違った方法で接続しているため、次のコードを使用して接続します。

$mysqli = @new mysqli('yourDBaddress', 'yourDBuserName', 'yourDBpassword', 'yourDBname');

if ($mysqli->connect_errno) {
    die('Connect Error: ' . $mysqli->connect_errno);
}
于 2013-01-12T14:44:35.860 に答える
0

準備済みステートメントを使用する必要があります。PDO を使用すると簡単に実行できます。その後、引用符は必要ありません。

于 2013-01-12T14:24:53.557 に答える
0

SQL Injection補足として、値が外部から取得された場合クエリは脆弱です。予防方法については、以下の記事をご覧ください。PreparedStatements を使用すると、値を一重引用符で囲む必要がなくなります。

于 2013-01-12T14:25:21.870 に答える