想知道爲什麼查詢可以在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);
想知道爲什麼查詢可以在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);
我假設你的變量$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();
}
感謝您準備好聲明,但這並未解決問題。問題是oci_default沒有提交。 – Jeffrey 2012-03-16 18:03:05
找到了解決方案。 OCI_DEFAULT沒有提交,因此我需要將其更改爲:
oci_execute($stmt, OCI_COMMIT_ON_SUCCESS);
您是否在檢查錯誤? – thescientist 2012-03-16 00:38:57