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

複数のクエリに対するPDOのサポート(PDO_MYSQL、PDO_MYSQLND)

    私が知っているように、PDO_MYSQLND PDO_MYSQLを置き換えました PHP5.3で。紛らわしいのは、名前がまだPDO_MYSQLであるということです。 。したがって、NDはMySQL+PDOのデフォルトドライバです。

    全体として、一度に複数のクエリを実行するには、次のものが必要です。

    • PHP 5.3+
    • mysqlnd
    • エミュレートされたプリペアドステートメント。 PDO::ATTR_EMULATE_PREPARESを確認してください 1に設定されています (デフォルト)。または、プリペアドステートメントの使用を避け、$pdo->execを使用することもできます。 直接。

    execの使用

    $db = new PDO("mysql:host=localhost;dbname=test", 'root', '');
    
    // works regardless of statements emulation
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
    
    $sql = "
    DELETE FROM car; 
    INSERT INTO car(name, type) VALUES ('car1', 'coupe'); 
    INSERT INTO car(name, type) VALUES ('car2', 'coupe');
    ";
    
    $db->exec($sql);
    

    ステートメントの使用

    $db = new PDO("mysql:host=localhost;dbname=test", 'root', '');
    
    // works not with the following set to 0. You can comment this line as 1 is default
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
    
    $sql = "
    DELETE FROM car; 
    INSERT INTO car(name, type) VALUES ('car1', 'coupe'); 
    INSERT INTO car(name, type) VALUES ('car2', 'coupe');
    ";
    
    $stmt = $db->prepare($sql);
    $stmt->execute();
    

    注:

    エミュレートされたプリペアドステートメントを使用する場合は、 DSN (5.3.6以降で使用可能)。それ以外の場合、奇妙なエンコーディングが使用されていると、SQLインジェクションがわずかに発生する可能性があります



    1. クラスでのPDOの使用

    2. `SqlDbType.Structured`を使用してNHibernateでテーブル値パラメーターを渡すことは可能ですか?

    3. Tan()がPostgreSQLでどのように機能するか

    4. テーブル名の適切な挿入