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

Perl:1回のMySQL呼び出しで複数の行を更新

    まず、最も重要なことは、SQL文字列に変数を直接補間しないことです。そのため、SQLインジェクション攻撃の可能性が残ります。これらの変数がユーザー入力に由来しない場合でも、データを台無しにする可能性のある危険なバグの可能性が残ります。

    MySQL DBDドライバーは複数のステートメントをサポートしますが、安全機能としてデフォルトでオフになっています。 mysql_multi_statementsを参照してください ClassMethods の下 DBD::mysqlドキュメントのセクション。

    しかし、両方の問題を同時に解決し、より移植性の高い、はるかに優れたソリューションは、プリペアドステートメントとプレースホルダー値を使用することです。

    my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");
    

    次に、ある種のループでデータを取得します:

    while( $whatever) { 
        my ( $EC, $MR, $EM ) = get_the_data();
        $sth->execute( $EC, $MR, $EM );
    }
    

    ステートメントを準備する必要があるのは1回だけで、プレースホルダーの値はDBDドライバーによって置き換えられます(適切に引用されることが保証されます)。

    プレースホルダーの詳細については、DBIドキュメント をご覧ください。 。



    1. 安定した/繰り返し可能なランダムソート(MySQL、Rails)

    2. MySQLテーブルの最大行数を設定するにはどうすればよいですか?

    3. データベースサイズが2ギガバイトを超えると、SQLiteのパフォーマンスが低下しますか?

    4. AzureDataStudioを使用してSQLServerデータベースを作成する