2010-07-19 173 views
1

我有一個叫做「private message」的MySQL表,名爲「messageid」的主鍵字段。從MySQL數據庫中刪除一行

我想要一個PHP查詢從「private message」中刪除任何行,其中「messageid = $ messageid」。

這是什麼類型的查詢?

由於提前,

約翰

回答

4
DELETE FROM `privatemessage` WHERE `messageid` = $messageid 

這只是原始的SQL查詢。像驗證和逃避用戶輸入等事情當然應該考慮。

例如,給定messageid作爲AUTO_INCREMENT整數主鍵我簡單地在PHP運行這個(轉換$messageid使用intval()一個int):

mysql_query('DELETE FROM `privatemessage` WHERE `messageid` = ' . intval($messageid)); 
+0

略微膨脹,[這]( http://www.w3schools.com/php/php_mysql_delete.asp)網頁有一個小而有用的例子。 – Stephen 2010-07-19 18:44:24

+4

您應該使用參數,以便「1或1 == 1」的messageid不會刪除您的所有私人消息(sql注入) – 2010-07-19 18:44:25

+1

事實上,如果您接受$ messageid的用戶輸入,請小心避免SQL注入。例如,用戶可能輸入'5 OR 1 == 1'作爲他們的輸入。然後形成查詢:'DELETE FROM'privatemessage'WHERE'messageid'='5'OR 1 == 1'。由於1 == 1總是爲真,所以會刪除每一行。 – Stephen 2010-07-19 18:47:16

1
$query = "DELETE FROM `privatemessage` WHERE `messageid` = '$messageid'"; 
mysql_query($query); 

但首先,檢查$messageid是一個數字(請參閱SQL Injection)。

Read more:關於MySQL刪除

+0

誰低估了這個?爲什麼? – EFraim 2010-07-19 19:24:33

2

您可能需要使用preprared語句,所以你在關於SQL注入安全可靠...

$conn = new mysqli($host, $user, $password, $database); 
if ($conn->connect_error) { 
    die('could not connet to database.'); 
} 
$statement = $conn->prepare("DELETE FROM privatemessage WHERE messageid = ?"); 
$statement->bind_param("messageid", $messageid); 
$statement->execute(); 
+0

是你的代碼是** sql注入免費**對不對? – 2017-08-02 06:30:28