Jak wiem, PDO_MYSQLND
zastąpiono PDO_MYSQL
w PHP 5.3. Mylące jest to, że nazwa nadal to PDO_MYSQL
. Więc teraz ND jest domyślnym sterownikiem dla MySQL+PDO.
Ogólnie rzecz biorąc, aby wykonać wiele zapytań naraz, potrzebujesz:
- PHP 5.3+
- mysqlnd
- Emulowane przygotowane wyciągi. Upewnij się, że
PDO::ATTR_EMULATE_PREPARES
jest ustawiony na1
(domyślna). Alternatywnie możesz uniknąć używania przygotowanych instrukcji i użyć$pdo->exec
bezpośrednio.
Korzystanie z 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);
Korzystanie z oświadczeń
$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();
Uwaga:
Używając emulowanych przygotowanych instrukcji, upewnij się, że ustawiłeś właściwe kodowanie (odzwierciedlające rzeczywiste kodowanie danych) w DSN (dostępne od 5.3.6). W przeciwnym razie może istnieć niewielka możliwość wstrzyknięcia SQL, jeśli używane jest nieparzyste kodowanie .