为什么执行PHP mysql_query失败

时间:2012-07-30 06:41:06

标签: php mysql

为什么这个PHP代码(mysql_query删除用户名为$phpVar的行)什么都不做?

mysql_query("DELETE FROM xraydeath WHERE user = $user");

8 个答案:

答案 0 :(得分:3)

可能是因为您忘了引用$user参数,请escape variables进入sql查询字符串。如果该参数直接连接到用户输入,则有人可能会提交' or 1=1 --并且您的整个表格都已消失。这个想法被称为sql injection

注意:旧的mysql_ *函数现已弃用,您应该避免使用它们see the alternatives

答案 1 :(得分:1)

你需要在这样的字符串周围加上引号:

mysql_query("DELETE FROM xraydeath WHERE user = '$user'");

答案 2 :(得分:1)

您忘记了用户周围的引号:

mysql_query("DELETE FROM xraydeath WHERE user = '$user'");

答案 3 :(得分:0)

你在期待什么?怎么会失败?除了将查询发送到服务器之外,Mysql_query不会以您正在使用它的形式执行任何操作。

 $result = mysql_query (...);
 // use the result if any.
 if (!$result) {
    die('Invalid query: ' . mysql_error());
 }
 // check the error that you might have

答案 4 :(得分:0)

您需要将$user放入引号

mysql_query("DELETE FROM xraydeath WHERE user = '".$user."';");

如果甚至没有删除行,DELETE也会成功,所以要获取实际删除的行数mysql_affected_rows()

$x = mysql_query("..");
echo "There were ".mysql_affected_rows()." rows affected";

**尽量不要使用mysql_*切换到PDO。

答案 5 :(得分:0)

假设xraydeath.user是字符类型,则需要将值括在引号中。如果$user尚未包含引号,请尝试:

mysql_query("DELETE FROM xraydeath WHERE user = '$user'");

对于踢球,请尝试设置$user = "' OR '1'='1";! (阅读SQL注入攻击,你应该切换到mysqli!)


表也可能没有匹配的行,因此不会删除任何内容。如果不知道您分配给$user的内容和数据,就无法知道。

答案 6 :(得分:0)

试试这个:

mysql_query("DELETE FROM xraydeath WHERE user = '".$user."'");

mysql_query("DELETE FROM xraydeath WHERE user = '".$user."';");

在mysql中使用的每个php变量,将它们放入'“。$ variable。”'

答案 7 :(得分:-1)

首先:不推荐使用mysql。你应该使用mysqli。 第二:用户是什么类型的? if是int: (面向对象的风格)

mysqli::query("DELETE (what you want) FROM xraydeath WHERE `user` = '".$user."'");

如果是varchar(string):

mysqli::query("DELETE (what you want) FROM xraydeath WHERE `user` LIKE '".$user."'");

或 (procedurel syle)

mysqli_query((your mysqli link), "DELETE (what you want) FROM xraydeath WHERE `user` LIKE/= '".$user."'");

希望有所帮助