web-dev-qa-db-ja.com

実際のエスケープ文字列とPDO

mysqlライブラリから移行した後、PDOを使用しています。古いreal_escape_string関数の代わりに何を使用しますか?

単一引用符をエスケープしてデータベースに移動する必要があり、すべての文字列にスラッシュを追加せずにこれを処理するより良い方法があると思います。何を使うべきですか?

79
John

PDO Prepare を使用する必要があります

リンクから:

異なるパラメーター値で複数回発行されるステートメントに対してPDO :: prepare()およびPDOStatement :: execute()を呼び出すと、ドライバーがクエリプランのクライアント側および/またはサーバー側のキャッシュをネゴシエートできるようになり、アプリケーションのパフォーマンスが最適化されますメタ情報、およびは、パラメータを手動で引用する必要性を排除することにより、SQLインジェクション攻撃を防ぐのに役立ちます

40
SteD

PDOは、mysql_escape_string()PDO :: quote()メソッド。

PHPウェブサイトからの抜粋です:

<?php
    $conn = new PDO('sqlite:/home/lynn/music.sql3');

    /* Simple string */
    $string = 'Nice';
    print "Unquoted string: $string\n";
    print "Quoted string: " . $conn->quote($string) . "\n";
?>

上記のコードは次を出力します:

Unquoted string: Nice
Quoted string: 'Nice'
33
PowerAktar

準備されたステートメントを使用します。これらはデータと構文を区別するため、MySQLデータをエスケープする必要がありません。例参照 このチュートリアル

4
Piskvor