2011-04-24 61 views
1

當我嘗試這樣直接在phpMyAdmin:問題刪除記錄與一個查詢的2個表

DELETE FROM navigation WHERE id='14';DELETE FROM subnavigation WHERE navi_id='14'; 

它的工作原理,但我它不與我的PHP查詢工作,我做:

$db->query('DELETE FROM navigation WHERE id='.$id.';DELETE FROM subnavigation WHERE navi_id='.$id.';'); 

它給了我這個錯誤,並沒有刪除任何東西:

你的SQL語法錯誤; 檢查對應 你的MySQL服務器版本使用附近的「DELETE FROM 子導航WHERE navi_id = 14」的 線1

我認爲我失去了一些東西真的很小的 正確的語法手冊! 謝謝你的時間和幫助。

回答

1

做一個查詢。

//don't forget to protect yourself from SQL-injection attacks! 
$id = mysql_real_escape_string($id); 

$delete_query = " DELETE n, sn from navigation n 
        LEFT JOIN subnavigation sn ON (n.id = sn.id) 
        WHERE n.id = '$id' "); 
$db->query($delete_query); 
+0

感謝您對此我將嘗試此操作,目前我無法保護SQL注入的任何內容,因爲我現在還沒有使用它,所以當一切都能夠完成其工作時,我將關閉所有漏洞 編輯:我用過你的想法,我不認爲我會盡快改變它,除非我發現另一個想法多一點速度。 謝謝你的幫助 – TooCooL 2011-04-24 22:03:09

+1

@TooCool我建議你總是要防止SQL注入代碼。您可能不小心留下了一個洞,足以讓您的網站受到威脅。 – clyc 2011-04-24 22:09:04

+2

@TooCool,從一開始就明確地放入de-SQL保護代碼。如果你甚至忘記了這些嬰兒中的一個,你所遭受的悲傷的數量是**不值**! – Johan 2011-04-24 22:10:42

2

mysql_query()發送一個唯一的查詢(不支持多個查詢)到與指定的link_identifier關聯的服務器上當前活動的數據庫。

http://php.net/manual/en/function.mysql-query.php

phpMyAdmin的爆炸基於分隔符的字符串,如執行多個查詢。

如果你想要去休書(不推薦)

你只需要通過標誌爲65536的mysql_connect的5參數(client_flags)。該值在/usr/include/mysql/mysql_com.h定義:

#define CLIENT_MULTI_STATEMENTS (1UL << 16) /* Enable/disable multi-stmt support */ 

UPDATE

創建第一個表中的觸發器,所以就刪除它還將從2表中刪除了。

+0

你有什麼想法如何以最好的方式做到這一點,因爲我不想把它寫下兩次! (做兩次查詢)。我想在一個查詢中做到這一點,但要從2個不同的表中刪除記錄..那麼什麼是最好的和正確的方式 – TooCooL 2011-04-24 21:58:46

+0

優雅和故障安全的解決方案將是一個觸發器,請參閱我的更新。 – Pentium10 2011-04-24 22:01:05

+0

-1過於複雜,你沒有提及ON DELETE CASCADE外鍵,這聽起來像一個更簡單的概念。 – Johan 2011-04-24 22:17:14