使用php oci进行更新的sql语法

时间:2012-03-16 00:23:40

标签: php sql oracle oci

有关为什么查询在SQLDeveloper中工作但在php中不起作用的任何想法?

$update = " update TABLENAME SET LASTMOD=current_timestamp WHERE TABLE_NAME=$table ";
$stmt = oci_parse($conn, $update);
oci_execute($stmt, OCI_DEFAULT);
oci_free_statement($stmt);

2 个答案:

答案 0 :(得分:4)

我假设您的变量$table不包含引号,必须在WHERE子句中引用:

$update = " update TABLENAME SET LASTMOD=current_timestamp WHERE TABLE_NAME='$table'";

oci_error()的调用会在您的查询中显示任何语法错误。

另请注意,根据文档,如果这是PL / SQL,则语句必须以;结尾

$update = " update TABLENAME SET LASTMOD=current_timestamp WHERE TABLE_NAME='$table';";

尽管使用绑定参数:

,声明最好作为一个适当的预备语句
$update = " update TABLENAME SET LASTMOD=current_timestamp WHERE TABLE_NAME=:table;";
$stmt = oci_parse($conn, $update);
oci_bind_by_name($stmt, ':table', $table);
$result = oci_execute($stmt, OCI_DEFAULT);
if (!$result) {
  echo oci_error();   
}

答案 1 :(得分:1)

找到解决方案。 OCI_DEFAULT没有提交,所以我需要将其更改为:

oci_execute($stmt, OCI_COMMIT_ON_SUCCESS);