【问题标题】:SQL SELECT without FROM clause in PHP with ODBC Firebird driver带有 ODBC Firebird 驱动程序的 PHP 中没有 FROM 子句的 SQL SELECT
【发布时间】:2018-06-14 13:46:26
【问题描述】:

我可以像这样用 Firebird 驱动程序连接一个 .eft 数据库文件:

$pdo = new PDO("odbc:DRIVER={Firebird/InterBase(r) driver}; dbname=$dbName;", $user, $pass);

当我尝试做一个简单的查询时

$stmt = pdo()->exec("select 1+1 as somma");

结果是:

致命错误:带有消息的未捕获异常“PDOException” 'SQLSTATE [HY000]:一般错误:-104 [ODBC Firebird Driver][Firebird]Dynamic SQL Error SQL error code = -104 Unexpected 命令行结束 - 第 1 行,第 15 列 (SQLExecDirect[-104] at ext\pdo_odbc\odbc_driver.c:247)' 在 D:\PROGRAMMAZIONE\ricoplast\com\db.php:25

有人可以帮助我吗?

PS:当我对不同的 ODBC 驱动程序执行相同操作时:
$pdo = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; ... 查询有效。

【问题讨论】:

  • en.wikipedia.org/wiki/Select_%28SQL%29 - "SQL SELECT 语句返回来自一个或多个表的记录结果集"
  • SQL 标准和 Firebird SQL 语法都需要在 select 中使用 from 子句。一些数据库系统不需要这个,但 Firebird 需要。
  • @MarkRotteveel 好吧,至少按照 SQL'99 标准,它应该是select * from (values(1+1)),但我不知道有多少真实的数据库会支持它。可悲的是,Firebird 两者都没有(它可以帮助在查询中创建临时伪表)
  • @Arioch'The Sure,但你仍然有一个 from-clause..

标签: php sql database pdo firebird


【解决方案1】:

问题是

select 1+1 as somma

不是一个有效的 Firebird 查询,您需要有一个可以从中选择的表。试试

select 1+1 as somma from rdb$database

Firebird 中的 rdb$database 表类似于 Oracle 中的 dual

【讨论】:

    【解决方案2】:

    谢谢大家。我发现问题出在哪里。当我必须进行查询时,我必须将" 之间的字段包围起来,以便 db 可以识别列。

    另一个问题: 我如何绕过我的数据库名称上的空间。我必须使用我客户的 db 名称。看起来像 name something.eft 但如果我用这个名字 firebird 说他找不到数据库

    SQLDriverConnect: -902 [ODBC Firebird Driver]File Database is not found'
    

    谁能下次帮我?

    【讨论】:

      猜你喜欢
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      • 1970-01-01
      • 2022-06-25
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多