Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO_OCI准备/执行_Php_Oracle_Pdo_Oracle11g - Fatal编程技术网

Php PDO_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

我正在试图弄清楚为什么我的pdo_oci execute/prepare语句不起作用。可能是我遗漏了一些琐碎的事情,或者是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是在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数组中指定的值?