hata modu PDO PDO :: ATTR_ERRMODE bağlıyor :: ERRMODE_EXCEPTION ayarlamanız gerekir.
Ve istisna hazırlamak() metodu ile atılmış olmasını bekliyoruz beri PDO :: ATTR_EMULATE_PREPARES * özelliğini devre dışı bırakmalısınız. Aksi takdirde, MySQL sunucusu çalıştırılana kadar ifadeyi "görmez". (Benim durumumda)
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->prepare('INSERT INTO DoesNotExist (x) VALUES (?)');
}
catch(Exception $e) {
echo 'Exception -> ';
var_dump($e->getMessage());
}
baskılar
Exception -> string(91) "SQLSTATE[42S02]: Base table or view not found:
1146 Table 'test.doesnotexist' doesn't exist"
http://wezfurlong.org/blog/2006/apr/using-pdo-mysql/
EMULATE_PREPARES = true şu anda pdo_mysql sürücüsü için varsayılan ayar olarak görünmektedir görüyoruz. sorgu önbellek şey o zamandan beri/değişim düzeltildi ve mysqlnd sürücüsü ile ben EMULATE_PREPARES ile değil sorunları vardı = (Ben sadece bir php hobisi değilim ama, ... üzerinde söz almak yok)
yanlış
*) ve daha sonra PDO::MYSQL_ATTR_DIRECT_QUERY var? - I) henüz bu iki özelliğin (etkileşimini anlamadığını itiraf etmeliyim, bu yüzden
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly', array(
PDO::ATTR_EMULATE_PREPARES=>false,
PDO::MYSQL_ATTR_DIRECT_QUERY=>false,
PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION
));
Hayır hala benim sorgu yanlış olduğunu biliyorum, çalışmıyor, ama o hatayı görüntülemek istiyor. – TPSstar
Sen 'yeni PDO (...' kendisine Aramayla ilgili bir hata olduğunu fark edebilirsiniz. (E_ALL) 'error_reporting' örneğin ayarlayarak error_reporting düzeyini artırmayı deneyin. –