Это более актуальный ответ на этот вопрос.
Старый способ предотвращения выполнения нескольких запросов состоял в отключении эмулированных приготовлений, однако это было применимо только к методу PDO::prepare()
. В более новых версиях PHP (> = 5.5.21 и> = 5.6.5) была введена новая константа, чтобы отключить выполнение нескольких запросов как в PDO::prepare()
, так и PDO::query()
. (Константы обычно не добавляются в версии исправлений, но это было сделано из-за серьезности атаки Drupal SQL-инъекции , вызванной этой возможностью).
Новая константа PDO::MYSQL_ATTR_MULTI_STATEMENTS
, и должен быть установлен при создании объекта (как четвертый аргумент для конструктора PDO) - установка его на ранее существующий объект с PDO::setAttribute()
не будет работать
$pdo = new PDO('mysql:host=_;dbname=_', '', '', [PDO::MYSQL_ATTR_MULTI_STATEMENTS => false]);