我有这个密码:

$host = "127.0.0.1";
$db = "mydb";
$user = "user";
$pass = "pass";

$dbh = new PDO("pgsql:dbname=$db;host=$host", $user, $pass);

$query = "select * from mytable";

$stmt = $dbh->prepare($query);
if ($stmt) {
    echo "Query was OK, execute!";
    $stmt->execute();

    var_dump($stmt->fetchAll());
} else {
    echo "Query was NOT OK!";

    var_dump($dbh->errorInfo());
}

但它总是说
查询正常,执行
即使SQL是公然错误的(例如"bogus SQL"或查询一个不存在的表)。它总是返回一个数据集,当查询错误时该数据集为空。我知道连接很好,因为有效的查询返回有效的结果。
我在任何地方都没有看到任何错误,在日志中也没有。

最佳答案

根据documentation
注:
模拟的准备语句不与数据库服务器通信,因此PDO::prepare()不检查该语句。
因此,您可以编写任何要准备的内容,只有在启用仿真时执行它才能检查其有效性。
您也不会检查execute()的返回值以查看它是否成功,如果documentation没有结果,fetchAll()将返回一个空数组。

关于php - PDO中的PostgreSQL永远不会出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44829738/

10-16 18:53