2013-10-07 41 views
-6
$sql = "DELETE t1, t2, t3, t4, t5, t6, t7 
FROM 
Bla1 AS t1, Bla2 AS t2, Bla3 AS t3, Bla4 AS t4, Bla5 AS t5, Bla6 AS t6, Bla7 AS t7 
WHERE 
    t1.id = t2.id 
AND 
    t2.id = t3.id 
AND 
    t3.id = t4.id 
AND 
    t4.id = t5.id 
AND 
    t5.id = t6.id 
AND 
    t6.id = t7.id 
AND 
    t1.id = {$_GET["id"]}"; 
+1

Yikes -1對於那裏有一個很大的SQL注入漏洞。 – Johan

+0

請參閱:http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php關於如何保持您的網站安全。 – Johan

+1

哦順便說一句,歡迎來到Stackoverflow,如果你問的問題,你需要提供一些背景。它會幫助你獲得更好的答案。如果我們不知道你想要什麼,那很難給你一個正確的答案。看到這裏如何提出良好的問題:http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist – Johan

回答

3

好吧,我會咬人的。

你已經在你的代碼有一個SQL注入孔
這裏:

t1.id = {$_GET["id"]}"; <<-- never inject php `GET` into SQL! 

看到這個問題的答案:How can I prevent SQL injection in PHP?

如果你想成爲一名網站管理員,寂寂SQL注入和XSS是最重要的兩件事情。
瞭解這兩件事情,你會有愉快的客戶。

返回業務:

MySQL的DELETE
您的DELETE語句中的語法錯誤。
刪除不遵循與SELECT相同的語法。
SELECT選擇列,DELETE僅適用於行,所以它是一個隱喻組合,用於提及DELETE語句中的列。

在這裏看到正確的語法:http://dev.mysql.com/doc/refman/5.5/en/delete.html

因爲你沒有在你的問題解釋你打算做,我不得不猜測。 看起來你正在綁定做一個多表刪除。
例如從多個相互關聯的表中刪除行。
這些表如何以及爲什麼相互關聯是重要的,但你沒有說明,所以我不得不猜測。

多表刪除 從手冊:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tbl_name [。 ] [,tbl_name [。] ...
FROM table_references
[WHERE where_condition]

$stmt = $pdo->prepare('DELETE FROM t1, t2, t3, t4, t5, t6, t7 
    WHERE (t1.id = t2.id) 
    AND (t2.id = t3.id) 
    AND (t3.id = t4.id) 
    AND (t4.id = t5.id) 
    AND (t5.id = t6.id) 
    AND (t6.id = t7.id) 
    AND (t1.id = :id'); 
$id = GET["id"]; 
$stmt->execute(array(':id' => $id)); 

需要注意的是,因爲你使用MySQL的PDO,你從SQL注射免疫。
請參閱here on info about prepared data objects PDO

+0

Thx約翰,我剛剛幾個小時前看到它,我做到了,但它沒有工作太,抱歉:-( 其他人會有解決方案? – Mireliria

+0

請注意,爲了這個工作,你需要安裝/啓用/包括PHP PDO庫;這裏的手冊:http://php.net/manual /en/book.pdo。PHP哦,不要說:它不起作用告訴我們確切的錯誤信息是什麼,什麼做了或沒有發生**和**你期望它做什麼。 – Johan

+0

對不起,我的英語,我是法語。我的頁面上沒有消息,它只適用於一行,但不適用於其他表格。我還沒有PDO庫,但我更喜歡mysql。所以沒有行被刪除,但沒有消息,處理該函數的頁面是空白的(delete.php?id = 1)。我不知道爲什麼。 – Mireliria