PDO_OCI准备/执行

时间:2013-12-05 12:36:37

标签: php oracle pdo oracle11g

我正在试图找出为什么我的pdo_oci执行/准备语句不起作用。这可能是一件微不足道的事情,我失踪了或者自己驱使他们自己或者我甚至都不知道...... 简短说明:有一个查询,要插入的参数数组。

try{
    $conn = new PDO($dsn,$db_username,$db_password);
}catch(PDOException $e)
{
    echo ($e->getMessage());
}

$statement = 'INSERT INTO "statements" ("modelID", "subject", "predicate", "object", "l_language", "author", "stread", "stedit", "stdelete", "epoch")
                VALUES  (?, ?, ?, ?, ?, ?, ?, ?, ?, sysdate)';
$params = array(8, 
'http://192.168.1.234/taooracle/tao_ora_dev.rdf#i1386245617410387',
'http://www.w3.org/2000/01/rdf-schema#label',
'Item 8',
'en-US',
'http://192.168.1.234/taooracle/tao_ora_dev.rdf#superUser',
'yyy[admin,administrators,authors]',
'yyy[admin,administrators,authors]',
'yyy[admin,administrators,authors]'
);

//test if $conn works
$result = $conn->query('SELECT * FROM "statements"');
if($result->fetch() > 0){
    echo 'PDO connection works' ."<br/>";
}
if(count($params) > 0){
    $sth = $conn->prepare($statement);  
    $sth->execute($params);
    $returnValue = $sth->rowCount();
}
echo 'Affected rows: '. $returnValue;

    **RESULTS:**
    PDO connection works
    Affected rows: 0

    EDIT: statements table column names/types
create table statements
(
  "modelID"    NUMBER(11),
  "subject"    VARCHAR2(255),
  "predicate"  VARCHAR2(255),
  "object"     VARCHAR2(4000),
  "l_language" VARCHAR2(255),
  "id"         NUMBER(20) not null,
  "author"     VARCHAR2(255),
  "stread"     VARCHAR2(255),
  "stedit"     VARCHAR2(255),
  "stdelete"   VARCHAR2(255),
  "epoch"      DATE
)

id通过触发器插入,非常插入语句。 (这无关紧要,因为使用pdo-&gt; exec()语句的简单查询可以正常运行,并且它们使用相同的表/列。)

编辑:我的回答 不得不改变'?'一些有效的字符串。不知道为什么oracle抛出它是无效字符的异常。

如果其他人有这个问题,我发现了导致它的原因。我用来生成查询的类,在查询结尾添加分号。这似乎并没有打扰MySQL,但它失败了甲骨文。所以我刚刚为pdo_oci驱动程序添加了if子句,如果找到则删除分号。

0 个答案:

没有答案