我对
MySQLi非常熟悉,正在尝试PDO,我听说它更好.我正在浏览目前的
here教程.他们说当PDO :: ERRMODE_EXCEPTION设置时PDO抛出一个异常,我们不小心对查询做了一些错误(例如,输入错误,DELECT而不是SELECT).我键入了相同的错误查询,以查看本地环境中的错误和异常消息.我在我的32位Windows 7 PC中安装了PHP 5.5,MySQL 5.6和Apache 2.4.9的最新WAMP,但没有得到我所期望的,没有异常被抛出.我尝试了教程中发布的相同代码:
try { $DBH = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass); $DBH->setAttribute( PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION ); # UH-OH! Typed DELECT instead of SELECT! $DBH->prepare('DELECT name FROM people'); } catch(PDOException $e) { echo "I'm sorry,Dave. I'm afraid I can't do that."; file_put_contents('PDOErrors.txt',$e->getMessage(),FILE_APPEND); }
没有PDOError.txt,没有错误消息.教程或我的环境有问题吗?或者有些情况下PDO无法抛出异常?我为MySQL安装了PDO驱动程序.
它可能会失败,因为查询永远不会被执行,正在等待进一步的指示.
既然它没有发现任何事情,那么它在PDO的眼中就是有效的;这是我的比喻.
执行它,你会看到它会抛出异常.
要么是在准备之后执行它,要么是简单的 – > query()而不是 – > prepare().