Является ли это правильным способом ВСТАВКИ строки в базу данных Oracle?


Я создал веб-приложение, которое будет использовать 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 автоматически генерируется при вставке строки.

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

Author: amlane86, 2012-02-09

2 answers

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

 3
Author: a1ex07, 2012-02-08 20:24:12

После

 $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();
 0
Author: Mouna Cheikhna, 2012-02-08 21:24:14