1

サイトがあり、ユーザーがタイトルを入力します。タイトルに任意の句読点を使用できるようにしたい。私の問題は、クエリが病気です:

"INSERT INTO table(title, body) VALUES ('$title','$body')";

$title と $body は GET 変数です。タイトルに引用符を付けると、文字列を終了して無効な SQL クエリを作成するかのように動作します。私が持っていると言う

$title = "I'm entering a title";
"INSERT INTO table(title, body) VALUES ('$title','$body')";
//"INSERT INTO table(title, body) VALUES ('I'm entering a title','$body')";

文字列を終了します。すべての二重引用符とエスケープ文字を使用しようとしましたが、何も使用しませんでした。誰かが解決策を知っていますか?

4

6 に答える 6

1

あなたのクエリは脆弱ですSQL Injectionが、PHP のPDOまたはMySQLiを使用すると、その問題を解決するのに役立ちます (データベースに単一引用符を挿入することもできます)。以下の記事をお読みください。

于 2012-11-26T05:52:00.520 に答える
1

データベースにデータを入力するとき、およびデータベースからデータを出力するときに、これらの 2 つの関数を使用します。

/****************************************/
/* Encode special chars                 */
/*                                      */
/****************************************/

function DBin($string) 
{
    return  trim(htmlspecialchars($string,ENT_QUOTES));
}

/****************************************/
/* Decode special chars                 */
/*                                      */
/****************************************/

function DBout($string) 
{
    $string = trim($string);
    return htmlspecialchars_decode($string,ENT_QUOTES);
}
于 2012-11-26T05:55:36.267 に答える
0

最初に PHP 経由で変数をサニタイズしてから、PDO または MySQLi 経由でクリーンに送信する必要があります...

于 2012-11-26T05:54:08.850 に答える
0

このphp関数を試すことができます..

mysql_real_escape_string

    $title1       = "I'm entering a title";
    $title        = mysqli_real_escape_string($title1);
    "INSERT INTO table(title, body) VALUES ('$title','$body')";

これを試してみてください。これが役立つことを願っています...

于 2012-11-26T05:58:04.947 に答える
0

mysqli_real_escape_stringSQLが必要です。

于 2012-11-26T06:00:17.883 に答える
0

この状況にはすでに組み込みメソッドがあります...mysql_escape_stringメソッドを見てください...以下のコードを参照してください...

$title = "I'm entering a title";
$title = mysql_escape_string( $title );
// $title === I\'m entering a title
"INSERT INTO table(title, body) VALUES ('$title','$body')";
// "INSERT INTO table(title, body) VALUES ('I\'m entering a title','$body')";
于 2012-11-26T06:04:32.703 に答える