【问题标题】:PDO Get error from particular statementPDO 从特定语句中获取错误
【发布时间】:2018-05-31 07:02:47
【问题描述】:

来自doc

您必须调用PDOStatement::errorInfo() 来返回对特定语句句柄执行的操作的错误信息。

好的,现在我有:

    $sth1 = $db_conn->prepare( "SELECT bla" );
    $sth1->execute();

    $sth2 = $db_conn->prepare( "SELECT 1" );
    $sth2->execute();

然后$sth2->errorInfo()[2] 给出错误:string(71) "ERROR: column "bla" does not exist

正如我从文档引用中了解到的那样, 对于特定的声明$sth2,根本不应该有错误。但是为什么它会从$sth1 返回错误?我有什么误解?

附: (我使用 postgres 作为我的数据库)

【问题讨论】:

  • 要不要做SELECT 'bla'来选择字面量bla
  • 不,SELECT 'bla' 是有效的 SQL,我对 $sth1 有特别无效的 SQL
  • SELECT 'bla' 有效。 SELECT bla 不是。
  • 您能否发布完整的代码来显示您的问题,我已经尝试过您的代码,但没有遇到同样的问题。
  • @NigelRen - 这可能是特定于驱动程序的吗?我使用 postgres 作为我的数据库

标签: php postgresql pdo


【解决方案1】:

当您向 PDO 语句询问错误代码时,如果语句中有错误,它会返回该错误代码,如果没有,则将请求传递到下一个最高级别(即数据库连接)。甚至有可能如果你直接询问连接,它会返回同样的东西。

在这种情况下,错误不在陈述中 - 这是一个完全有效的陈述,只是不符合当前的现实。考虑另一个准备好的语句,它添加了在 select 语句之前运行的 blah 列。

返回的是数据库连接上的最后一个错误,它只是通过不是导致问题的语句的语句返回的。 Buggy,我同意你,但你确实问过“为什么”。

【讨论】:

  • '这是一个完全有效的陈述,只是不符合当前的现实'我将不得不记下这一点以备将来使用。
  • 这不是一个有效的声明。 FROM 子句对于 SELECT 查询是强制性的,否则服务器不知道要查看哪个表。
  • @SpacePhoenix - FROM 子句对于类似这样的查询不是 postgresql 的强制要求:SELECT 1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
  • 2012-03-27
  • 2011-07-19
  • 1970-01-01
  • 2019-03-05
  • 2018-02-11
相关资源
最近更新 更多