PDO_OCI分号

时间:2013-12-06 12:31:02

标签: sql oracle pdo

似乎当SQL查询最后有分号时,准备/执行语句失败。我得到 ORA-00911:无效字符错误。如果这是一个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

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

1 个答案:

答案 0 :(得分:1)

这不是一个错误,这是应该的。结尾分号不是SQL的一部分,它只是sqlplus,mysql等程序的标记,或者是一个语句完成的任何内容。因此,您不应该在代码中使用这些分号。

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