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