sql >> データベース >  >> RDS >> Mysql

SQLクエリでの一重引用符

    mysql_real_escape_string() およびSQLインジェクション すでに言及されています。
    しかし、今のところ、スクリプトは(苦労して)sqlステートメントをデータ/パラメーターと混合する必要があり、次のステップでMySQLサーバーはデータをステートメントから分離する必要があります。
    (サーバー側)プリペアドステートメント クエリの両方の「部分」は別々に送信され、(MySQLサーバーの)SQLパーサーは、ステートメントの終わりとデータの始まりについて「混乱」することはありません。

    php-mysql モジュールはプリペアドステートメントを認識しませんが、 php-mysql i および PDO します。

    $pdo = new PDO('mysql:host=localhost;dbname=test', '...', '...'); 
    $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    
    $stmt = $pdo->prepare('
      UPDATE
        Videos
      SET
        Title=:title ,
        Preacher=:preacher ,
        Date=:date ,
        Service=:service ,
        File=:file ,
        Description=:description
      WHERE
        id=:id
    ');
    $stmt->bindParam(':title', $_POST['title']);
    $stmt->bindParam(':preacher', $_POST['preacher']);
    $stmt->bindParam(':date', $_POST['date']);
    $stmt->bindParam(':service', $_POST['service']);
    $stmt->bindParam(':file', $_POST['file']);
    $stmt->bindParam(':description', $_POST['description']);
    $stmt->bindParam(':id', $_GET['id']); // really _GET?
    $stmt->execute();
    

    1回の操作で$stmtを使用すると、肥大化する可能性があります。ただし、それ以外の場合は、パラメーターごとにmysql_real_escape_string()を呼び出す必要があることを考慮してください。



    1. 重複キーでのInnoDBの自動インクリメントを防止します

    2. SQL ServerのSleep()と同等:WAITFORステートメント

    3. MySQL LAG/LEADの問題

    4. zip形式のCSVファイルをPostgreSQLにインポートする