Является ли это правильным способом ВСТАВКИ строки в базу данных 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
автоматически генерируется при вставке строки.
Пожалуйста, помогите мне решить эту проблему. Спасибо!
2 answers
Вы должны взять на себя обязательство. Каждое обновление/вставка/удаление начинает новую транзакцию, если она еще не запущена. Поэтому выпишите еще один оператор COMMIT
после вставки записи (или группы записей). В Oracle нет режима автоматической фиксации.
После
$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();