Синтаксис sql для обновления с использованием php oci - PullRequest
0 голосов
/ 16 марта 2012

Есть мысли о том, почему запрос работает в 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);

Ответы [ 2 ]

4 голосов
/ 16 марта 2012

Я предполагаю, что ваша переменная $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 голос
/ 16 марта 2012

Нашел решение.OCI_DEFAULT не фиксирует, поэтому мне нужно было изменить его на:

oci_execute($stmt, OCI_COMMIT_ON_SUCCESS);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...