为什么这个删除不能删除整个记录:
$query = 'DELETE FROM tblEvents WHERE index = $_GET["id"]';
$result = mysql_query($query, $db) or die(mysql_error($db));
在 MySQL 中 index 是 int 类型的变量,auto_incremented 在哪里?
为什么这个删除不能删除整个记录:
$query = 'DELETE FROM tblEvents WHERE index = $_GET["id"]';
$result = mysql_query($query, $db) or die(mysql_error($db));
在 MySQL 中 index 是 int 类型的变量,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 是保留字,也可能导致问题,您可以使用反引号将其转义,
`index`
但是如果你把它重命名为 just 会好得多id
您应该使用单独的查询来测试删除是否成功
$query = 'DELETE FROM tblEvents WHERE index = $_GET["id"]';
mysql_query($query, $db);
if( mysql_affected_rows < 1 ) die();
弹片上校是对的,你不能直接在单引号中的字符串中使用变量。如果您在查询周围使用双引号,它将起作用。
编辑:正如上校 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}";
这也有效。