【问题标题】:PDO_OCI SemicolonPDO_OCI 分号
【发布时间】:2013-12-23 19:26:38
【问题描述】:

似乎当 SQL 查询以分号结尾时,准备/执行语句会失败。我得到 ORA-00911: invalid character 错误。我想知道这是否是 pdo_oci 驱动程序错误?有没有人遇到过这个问题? 示例:

try{
    $conn = new PDO($dsn,$db_username,$db_password,$options);
}catch(PDOException $e)
{
    echo ($e->getMessage());
}
try{
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sqlQuery = 'SELECT "object" FROM "statements" WHERE "subject" = ? and "predicate" = ?;';
    $sth = $conn->prepare($sqlQuery);
    $sth->execute(array('http://192.168.1.234/taooracle/tao_ora_dev.rdf#i1386330868934416', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type'));    
    while ($row = $sth->fetch()){
        $uri = $row['object'];  
        echo $uri;
    }    

}catch(PDOException $e){
    print $e->getMessage() ."<br />";
    print $e->getLine() ."<br />";
}

SQLSTATE[HY000]: General error: 911 OCIStmtExecute: ORA-00911: invalid character

删除分号很容易,但是这样的查询更多,我想知道是否有更好的选择。

【问题讨论】:

    标签: sql oracle pdo


    【解决方案1】:

    这不是错误,它可以正常工作。结束分号不是 SQL 的一部分,它只是 sqlplus、mysql 或任何一条语句完成的程序的标记。因此,您不应该在代码中使用这些分号。

    我知道,mysql 接受它们,可能是因为开发人员在回答了太多“为什么这不起作用?”之后才把它放进去。问题。但正确的方法是从代码中删除分号 - mysql 接受它们的事实比其他数据库不接受的事实更像是一个错误:-)

    【讨论】:

      猜你喜欢
      • 2011-08-22
      • 2014-01-19
      • 2011-02-03
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 2011-09-04
      • 2014-08-21
      相关资源
      最近更新 更多