[英]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.