【问题标题】:PDO error uncaught exception SQLSTATE[HY000]PDO 错误未捕获异常 SQLSTATE[HY000]
【发布时间】:2013-02-19 05:06:52
【问题描述】:

我不断收到此错误,但我不知道为什么....

错误是:

Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]:

General error' in test.php:25\nStack trace:\n#0 test.php(25): 

PDOStatement->fetch()\n#1 {main}\n  thrown in test.php on line 25

我的查询是这样的:

$stmt = $pdo->prepare("

SELECT *,t1.id AS theID FROM users
   t1 LEFT JOIN users_settings t2
ON t1.id=t2.tid                 
   INNER JOIN extra_settings t3
ON t2.bid=t3.id");

try {
    $stmt->execute();
} catch (PDOException $e) {
    echo $e -> getMessage();  
}

while($row = $stmt->fetch()){ //error is here
    //do stuff
}

脚本可以运行,但仍然显示错误 =/

错误是什么意思,我该如何解决?

【问题讨论】:

  • 那里的答案没有解决我的问题,所以不是真正的重复。
  • @Dave 只是为了仔细检查一下,如果在 SQL 提示符下输入查询会给出正确的结果,并且 execute() 不会向页面提供任何错误输出?
  • @JoachimIsaksson 我的屏幕上没有错误,我删除了查询并做了一个基本的select * from table,它工作正常,所以我猜它与我的连接有关?
  • @Dave 只要查询在 SQL 提示符下运行,它就应该在 PDO 中运行良好。在此页面之前您有任何疑问吗?

标签: php pdo


【解决方案1】:

这是因为您必须在 try 语句中运行 while 循环:

try {
    $stmt->execute();
    while($row = $stmt->fetch()){
        //do stuff
    }
} 
catch (PDOException $e) {
    echo $e -> getMessage();  
}

您看到此消息是因为您的查询有问题。试试:

SELECT *,t1.id AS theID FROM users
   t1 LEFT JOIN t2.users_settings
   ON t1.id=t2.tid                 
   INNER JOIN t3.extra_settings
   ON t2.bid=t3.id

【讨论】:

  • 我认为情况并非如此,我从未见过将它放在 php 手册中的 try 语句中。
  • 它不能解决您的问题,但它会阻止Uncaught exception 消息,请参阅我的更新
  • 嗯...可能是您的问题?
  • 我会做一个简单选择的测试查询请按住。
  • @Dave 如果你得到Uncaught exceptions 那么它仅仅意味着你没有捕捉到异常。将 everything 放入 try...catch 块,然后放入 var_dump($e->getMessage());die;。它会告诉你问题是什么。
猜你喜欢
  • 2012-07-08
  • 1970-01-01
  • 2013-06-20
  • 2012-07-09
  • 2017-06-17
  • 2023-01-12
  • 1970-01-01
  • 2011-12-27
相关资源
最近更新 更多