Как установить режим SQL при использовании PDO?

Я пытаюсь установить режимы SQL, я не могу понять, как это сделать, используя PDO. Я пытаюсь установить традиционный режим в MySQL и не допускать недопустимые даты.

Может ли кто-нибудь помочь?

Solutions Collecting From Web of "Как установить режим SQL при использовании PDO?"

При установке sql_mode во время выполнения вы можете использовать необязательную переменную «SESSION». Таким образом, это не повлияет на других клиентов. Вы можете установить SESSION sql_mode, а затем вернуть его к предыдущему значению после завершения запроса. Таким образом вы можете установить sql_mode для конкретной операции.

Из руководства MySql:

«Вы можете изменить режим SQL во время выполнения, используя оператор SET [GLOBAL | SESSION] sql_mode = 'modes', чтобы установить системное значение sql_mode. Установка GLOBAL-переменной требует привилегии SUPER и влияет на работу всех клиентов, которые подключаются к этой время. Настройка переменной SESSION влияет только на текущего клиента. Любой клиент может в любое время изменить собственное значение sql_mode сеанса. "

Я лично добавил некоторые методы в свой класс базы данных, чтобы справиться с этим. initSqlMode () выполнит запрос «SELECT SESSION.sql_mode» и сохранит значение по умолчанию в качестве переменной класса. setSqlMode () позволит вам установить SESSION sql_mode в (VALIDATED) пользовательское значение. resetSqlMode () устанавливает для SESSION sql_mode значение по умолчанию. Я использую переменную SESSION при управлении sql_mode в любое время.

Затем вы можете сделать что-то вроде следующего. Обратите внимание, что это только psuedocode; в моем примере нет ничего, чтобы предотвратить внедрение sql или параметризовать SQL-запрос.

$db = new database(); $badqueryresult = $db->executeStrict('BAD SQL QUERY'); Class database { ... function executeStrict($query){ $this->initSqlMode(); $this->setSqlMode('STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'); $result = $this->Execute($query); $this->resetSqlMode(); return $result; } } 

Это относится только к вашему соединению. Команда будет запущена, как только PDO подключится:

 $pdo = new PDO( $dsn, $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET sql_mode="TRADITIONAL"') ); 

См. PHP: MySQL (PDO)
См. 5.1.6. Режимы сервера SQL

 function get_pdo($c =false){ if (!$c){$c=get_config();} $pdo=new PDO($c['dsn'] , $c['db_user'], $c['db_password']); $better_sql_defaults=array ( 'SET SESSION sql_warnings=1', 'SET NAMES utf8', 'SET SESSION sql_mode = "ANSI,TRADITIONAL" ', ); // throw an exception on errors $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); foreach ($better_sql_defaults as $sql){ $pdo->query($sql); } return $pdo; }