2012-03-16 62 views
0

想知道爲什麼查詢可以在SQLDeveloper中工作,但是在php中卻不行?使用php oci更新sql語法

$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

您是否在檢查錯誤? – thescientist 2012-03-16 00:38:57

回答

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(); 
} 
+0

感謝您準備好聲明,但這並未解決問題。問題是oci_default沒有提交。 – Jeffrey 2012-03-16 18:03:05

1

找到了解決方案。 OCI_DEFAULT沒有提交,因此我需要將其更改爲:

oci_execute($stmt, OCI_COMMIT_ON_SUCCESS);