2012-02-08 59 views
2

我已經創建了一個Web應用程序,它將使用PHP將行插入到Oracle數據庫中。我正在使用Zend Framework連接到數據庫。當我測試它時,我沒有得到任何錯誤,但我沒有看到表中添加的行。這是在Oracle數據庫中插入行的正確方法嗎?

這是我的代碼:

$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在插入行時自動生成。

請幫我解決這個問題。謝謝!

+0

如何是'id'自動生成的,如果是,爲什麼它在列表中?另外,你是否嘗試在SQLPlus中輸入完全相同的INSERT命令或其他東西來查看它是否有效? – 2012-02-08 20:24:05

+0

是的,我使用帶SQL Plus的Oracle Instant CLient鍵入它,並像魅力一樣工作。我無法讓PHP自己做。 – amlane86 2012-02-08 20:25:14

+1

你有沒有在任何地方犯下這個問題? – tbone 2012-02-08 20:35:28

回答

3

你必須承諾。如果沒有啓動,每個更新/插入/刪除都會開始一個新事務。所以在插入一條記錄(或一堆記錄)後發出另一條COMMIT聲明。 Oracle沒有自動提交模式。

+0

通常,PDO將自動提交。 – amlane86 2012-02-08 20:30:14

+0

當然,你可以用PDO來做,它會更好('$ db-> commit()'),但我懷疑它是自動完成的... – a1ex07 2012-02-08 20:39:00

0

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

echo $req->__toString();來獲取生成的查詢並複製它在SQL執行它加上 如果它工作那麼你唯一的問題是,你需要提交:

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