2012-01-04 77 views
1

我的代码:错误处理对于PDO :: ATTR_EMULATE_PREPARES =>假

$st = $conn->prepare('abc'); 
echo "emulate is : " . $st->getAttribute(PDO::ATTR_EMULATE_PREPARES) . "<br />"; 

$sql = "SELECT count(*) FROM traceuser WHERE username=? ORDER BY gg DESC"; 
$q = $conn->prepare($sql); 
$result = $q->execute(array("zac1987")); 
$number_of_rows = $q->fetchColumn(); 
if($result){ 
    echo "sql query successful"; 
}else{ 
    echo "sql query fail. "; 
    print_r ($q->errorInfo()) ; 
} 


输出如果PDO::ATTR_EMULATE_PREPARES => true
仿真是:1个
SQL查询失败。阵列([0] => 00000 [1] => 1054 [2] =>未知列在 'order子句' 'GG')


如果PDO::ATTR_EMULATE_PREPARES => false输出:
致命错误:调用一个成员函数getAttribute()在非对象上在/home/aekcom/public_html/test-countResult-fakePS.php上行33

致命错误:调用一个成员函数execute()第41行的/home/aekcom/public_html/test-countResult-fakePS.php

问题:
为什么getAttribute()不工作如果PDO::ATTR_EMULATE_PREPARES => false?我如何检查模拟的价值?或者如何让它显示“模拟是:0”?

如何使PDO::ATTR_EMULATE_PREPARES => false显示等代替“功能的execute()一个非对象的”“未知列‘GG’”错误消息的更多细节?

回答

1

在行:

$conn->prepare('abc'); 

你必须在SQL “ABC”(非常糟糕)语法错误。通过仿真,在准备时没有错误检查,并且执行失败。如果没有模拟,你的准备失败,$ st是空或虚假或任何。