Php PDO_OCI准备/执行
我正在试图弄清楚为什么我的pdo_oci execute/prepare语句不起作用。可能是我遗漏了一些琐碎的事情,或者是oci自己驾驶他们,或者我甚至都不知道了。。。 简短描述:有一个查询,需要插入的参数数组Php PDO_OCI准备/执行,php,oracle,pdo,oracle11g,Php,Oracle,Pdo,Oracle11g,我正在试图弄清楚为什么我的pdo_oci execute/prepare语句不起作用。可能是我遗漏了一些琐碎的事情,或者是oci自己驾驶他们,或者我甚至都不知道了。。。 简短描述:有一个查询,需要插入的参数数组 try{ $conn = new PDO($dsn,$db_username,$db_password); }catch(PDOException $e) { echo ($e->getMessage()); } $statement = 'INSERT INTO
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是在insert语句上通过触发器插入的。这其实并不重要,因为使用pdo->exec语句的简单查询可以工作,并且它们使用相同的表/列
编辑:我的答案
必须将“?”更改为某个有效字符串。不知道oracle为什么抛出异常,因为它是无效字符
如果其他人有这个问题,我会找出原因。我用来生成查询的类,在查询的末尾附加了分号。这似乎并没有困扰MySQL,但它让Oracle失败了。所以我刚刚为pdo_oci驱动程序添加了if子句,以便在找到分号时删除分号。$conn->setAttributePDO::ATTR_ERRMODE,pdo::ERRMODE_EXCEPTION;将此代码放在try块中,然后告诉您现在得到了什么?我最初有此PDO::ERRMODE设置,但由于某些原因,它似乎不适用于oracle,但现在我尝试了它,得到了有效的oracle sql错误,应该能够修复它。谢谢你的建议。很高兴它帮了大忙兄弟:这很有趣,在使用prepare…VALUES?,?,?。。。甲骨文是这么说的?是无效字符,但不应执行$params将所有问号替换为$params数组中指定的值?