sql >> Base de Datos >  >> RDS >> Mysql

Compatibilidad con PDO para múltiples consultas (PDO_MYSQL, PDO_MYSQLND)

Por lo que sé, PDO_MYSQLND reemplazado PDO_MYSQL en PHP 5.3. La parte confusa es que el nombre sigue siendo PDO_MYSQL . Así que ahora ND es el controlador predeterminado para MySQL+PDO.

En general, para ejecutar varias consultas a la vez necesita:

  • PHP 5.3+
  • mysqlnd
  • Declaraciones preparadas emuladas. Asegúrese de PDO::ATTR_EMULATE_PREPARES se establece en 1 (defecto). Alternativamente, puede evitar el uso de declaraciones preparadas y usar $pdo->exec directamente.

Uso de 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);

Declaraciones de uso

$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();

Una nota:

Cuando utilice declaraciones preparadas emuladas, asegúrese de haber establecido la codificación adecuada (que refleje la codificación de datos real) en DSN (disponible desde 5.3.6). De lo contrario, puede haber una pequeña posibilidad de inyección SQL si se usa alguna codificación extraña .