0

次のようなクエリがある場合:

SELECT *
FROM aii_images
WHERE id=34

そして、それで mysql_real_escape_string を実行します:

Something is wrong in your syntax near '\n                FROM aii_images

mysql_real_escape_string を使用しない場合は、このような問題はありません。

それを修正する良い方法はありますか?Str_replace、または同様の関数はオプションではありません - 私のクエリには "\n" と多くのテキストが含まれることがあります。Str_replace はサーバーを強制終了します。

4

2 に答える 2

2

mysql_real_escape_string()ステートメント全体ではなく、値でのみ使用してください。

$strStatement = "
    SELECT
        *
    FROM
        aii_images
    WHERE
        id = '" . mysql_real_escape_string( $strId ) . "';";
于 2012-07-27T12:00:50.383 に答える
1

まず、クエリ全体をエスケープすることは想定されていません。挿入するフィールドだけです。(これについては@Raischの回答を参照してください)

次に、mysql_xxx関数をこれ以上使用しないことをお勧めします -- PHP マニュアルには、これが非常に明確に記載されています: http://php.net/manual/en/function.mysql-query.php

代わりに、mysqli_xxx関数または PDO ライブラリのいずれかを使用する必要があります。これら 2 つのライブラリの詳細情報およびマニュアル ページへのリンクについては、上記のリンクを参照してください。

これらのライブラリのいずれかを使用している場合は、「Prepared Statements」手法を使用できます。これにより、文字列を手動で再度エスケープする必要がなくなります。これははるかに優れた手法であり、この質問全体が冗長になります。

于 2012-07-27T12:13:21.253 に答える