繁体   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