我有一個從rss文件導入數據的腳本,並且我想在插入之前清空我的表,所以我的數據庫中沒有任何舊條目,但是我無法獲取語法對,因爲沒有東西被刪除。插入pdo之前的空表
這裏是我嘗試:
try {
$db->beginTransaction();
$stmt = $db->prepare("DELETE FROM $table");
$stmt = $db->prepare("INSERT INTO $table(id,name) VALUES(:id,:name)ON DUPLICATE KEY UPDATE name=:name");
$stmt->execute(array(':id' => $id, ':name' => $name));
$db->commit();
} catch(PDOException $ex) {
//Something went wrong rollback!
$db->rollBack();
echo $ex->getMessage();
}
編輯
我與截斷嘗試過,但認爲我需要刪除自截斷不空/刪除任何東西:
try {
$db->beginTransaction();
$stmt = $db->prepare("TRUNCATE TABLE $table");
$stmt = $db->prepare("INSERT INTO $table(id,name) VALUES(:id,:name)ON DUPLICATE KEY UPDATE name=:name");
$stmt->execute(array(':id' => $id, ':name' => $name));
$db->commit();
} catch(PDOException $ex) {
//Something went wrong rollback!
$db->rollBack();
echo $ex->getMessage();
}
很可能是因爲'safe_update's啓用,這意味着你不能沒有條件執行'DELETE' /'UPDATE'。你可能想要的是'TRUNCATE',但是如果你真的想要一個'DELETE',你可以考慮加入:'WHERE id> 0'(因爲它最有可能匹配所有行) – 2013-03-12 17:37:12
有了下面的答案,你知道'DELETE'會使你的'auto_increment'保持當前的編號,'TRUNCATE'會重置它。不要說這是你的情況,只是一些你可能會覺得有用的信息。 – Zak 2013-03-12 17:40:01
@Zak他在查詢中綁定了ID。似乎沒有使用'auto_increment'。當然,誰知道 - 因爲沒有模式定義。 – 2013-03-12 17:43:56