0

为什么这个删除不能删除整个记录:

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

在 MySQL 中 index 是 int 类型的变量,auto_incremented 在哪里?

4

4 回答 4

4

你的问题 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

于 2010-03-15T13:41:36.323 回答
1

您应该使用单独的查询来测试删除是否成功

$query = 'DELETE FROM tblEvents WHERE index = $_GET["id"]';
mysql_query($query, $db);
if( mysql_affected_rows < 1 ) die();
于 2010-03-15T13:46:25.007 回答
0

弹片上校是对的,你不能直接在单引号中的字符串中使用变量。如果您在查询周围使用双引号,它将起作用。

编辑:正如上校 Shrapnel 在他的评论中所说,在这种情况下,您还必须将数组偏移量中的双引号更改为单引号。

于 2010-03-15T13:44:54.643 回答
-1

希望您已经知道这一点,但您需要确保这一点,$_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}";

这也有效。

于 2010-03-15T13:47:04.110 回答