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
解決策が見つかりました。 OCI_DEFAULTはコミットされないため、変更する必要がありました。
oci_execute($stmt, OCI_COMMIT_ON_SUCCESS);
あなたはエラーをチェックしていますか? – thescientist