有关为什么查询在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);
答案 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);