Это правильный способ вставить строку в базу данных Oracle? - PullRequest
2 голосов
/ 09 февраля 2012

Я создал веб-приложение, которое будет использовать PHP для вставки строки в базу данных Oracle. Я использую Zend Framework для подключения к базе данных. Когда я проверяю его, я не получаю никаких ошибок, но не вижу добавленной строки в таблице.

Вот мой код:

$remote = $_SERVER['REMOTE_ADDR'];   

// Connect with PDO
$db = Zend_Db::factory('PDO_OCI', 
array(
  'dbname' => $dbname,
  'username' => $dbuser,
  'password' => $dbpass
)
);

$req = "INSERT INTO " . $dbtable . " (id, url, adddate, addip) VALUES ('', '" . $safeurl . "', SYSDATE, '" . $remote . "')";
$res = $db->prepare($req);
$res->execute();

$safeurl генерируется пользовательским вводом и очищается. id генерируется автоматически при вставке строки.

Пожалуйста, помогите мне решить эту проблему. Спасибо!

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

Вы должны совершить.Каждое обновление / вставка / удаление начинает новую транзакцию, если она не запущена.Так что введите еще один оператор COMMIT после вставки записи (или набора записей).В Oracle нет режима автоматической фиксации.

0 голосов
/ 09 февраля 2012

после

 $res = $db->prepare($req);

сделать echo $req->__toString();, чтобы получить сгенерированный запрос, затем скопировать его и выполнить в SQL Plus, если он работает, тогда ваша единственная проблема заключается в том, что вам нужно зафиксировать:

$db->beginTransaction();
$req = "INSERT INTO " . $dbtable . " (id, url, adddate, addip) VALUES ('', '" . $safeurl . "', SYSDATE, '" . $remote . "')";
$res = $db->prepare($req);
$res->execute();
$db->commit();
...