На основании примеров в xPDO Getting Started guide, $modx
в этом контексте, как представляется, класс расширение PDO
и результат объекта ресурс $myquery
, вероятно, является объектом PDOStatement
.
Таким образом, вы можете установить режим ошибки исключения на $modx
, как и с обычным объектом PDO.
$modx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
, чтобы заставить его выбросить ошибки при сбое. По умолчанию ошибки PDO молчат; его режимы ошибки are documented here.
Исправление:Looking into the xPDO source не расширитьPDO
, а содержит PDO
объекта в качестве свойства и методы реализации PDO, передавая их через его свойство соединения. Таким образом, вызов setAttribute()
будет передан в базовый объект PDO
и должен работать соответствующим образом.
The xPDO constructor расширяет функциональность от нормального PDO конструктора чуть-чуть, и принимает массив опций в 5-м параметром, где вы можете установить режим ошибки, а не настройку позже с помощью setAttribute()
:
$xpdo = new xPDO($dsn, $user, $password, [], [PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION]);
Какой бы метод вы выбрать, чтобы установить его, вы можете обернуть свой код в try/catch
блоке перехватывать исключения типа PDOException
об ошибке:
try {
$insert = "some insert sql statement that will fail";
$myquery = $modx->query($insert);
}
catch (PDOException $e) {
echo 'error occurred! ' . $e->getMessage() . '<br>';
}
вы можете также более просто установить ErrorMode на PDO::ERRMODE_WARNING
, и вместо этого PHP будет генерировать сообщения E_WARNING
, которые, в отличие от исключений, не являются фатальными.
Я смог проверить все эти работы, как ожидается, путем установки быстрого теста с помощью xPDO.
Я не уверен, в MODx документы, они, как правило, документировать функции xpdo как: $ xpdo-> запрос() вместо $ modx-> запрос() .. HTTP : //rtfm.modx.com/xpdo/2.x/getting-started/creating-a-model-with-xpdo/defining-a-schema/defining-relationships –
Из 'modx.class.php':' class modX расширяет xPDO {...} ' – proxyfabio