2012-03-16 29 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

答えて

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

1

解決策が見つかりました。 OCI_DEFAULTはコミットされないため、変更する必要がありました。

oci_execute($stmt, OCI_COMMIT_ON_SUCCESS); 
関連する問題