簡體   English   中英

刪除MySQL中以php為目標的auto_incremented int記錄?

[英]Delete record in MySQL with php targeting auto_incremented int?

為什么此刪除無法刪除整個記錄:

$query = 'DELETE FROM tblEvents WHERE index = $_GET["id"]';
$result = mysql_query($query, $db) or die(mysql_error($db));

哪里index是int類型的變量,在MySQL中是auto_incremented?

您的問題php是相關的,而不是mysql。
print $query; 看看。
然后參考php字符串語法, http://php.net/types.string以獲取正確的語法。

另外,必須正確准備,轉義用於查詢的變量,或者對於整數值,必須手動將其強制轉換為該類型,

$id=intval($_GET["id"]);

或者,使其成為一行,

$query = 'DELETE FROM tblEvents WHERE `index` = '.intval($_GET["id"]);

同樣,索引也是保留字,也可能引起問題,您可以通過反引號將其轉義,

`index`

但是將其重命名為id會更好

您應該使用單獨的查詢測試刪除是否成功

$query = 'DELETE FROM tblEvents WHERE index = $_GET["id"]';
mysql_query($query, $db);
if( mysql_affected_rows < 1 ) die();

Col. Shrapnel是正確的,您不能在單引號中的字符串中直接使用變量。 如果您在查詢周圍使用雙引號,則它將起作用。

編輯:正如Shrapnel上校在他的評論中所說,在這種情況下,您還必須將數組偏移量中的雙引號更改為單引號。

希望您已經知道這一點,但是您需要確保$_GET['id']安全,這樣人們才能進行SQL注入。 嘗試改用以下內容:

$query = sprintf('DELETE FROM tblEvents WHERE index = %d',mysql_real_escape_string($_GET['id']));

這也解決了在單引號而不是雙引號中使用變量的問題。

如果您想也可以:

$id = mysql_real_escape_string($_GET['id']);
$query = "DELETE FROM tblEvents WHERE index = {$id}";

這也可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM