在mysql_query中使用变量WHERE语句不起作用

时间:2014-08-22 15:30:02

标签: php mysql

我正在尝试在查询WHERE语句中使用变量,但它显示0结果。如果我直接硬编码文本而不是使用变量,它就可以工作。该变量从$_GET拉出,如果我回显该变量,则显示正确的文本。

这是我的代码:

$Domain = $_GET['Domain'];
$result = mysql_query(SELECT Code, Title, Domain, Status FROM tablename WHERE Domain="$Domain" ORDER BY Code');

如果我将$Domain换成直接文字,例如ABC,则可行。我试图在整个语句中交换引号和单引号,删除$ Domain周围的引号,单独连接语句....所有产生错误或相同的结果。

如上所述,如果我echo $Domain,它会显示ABC(或者它应该显示的内容),所以我知道它正在从$_GET正确拉出。

任何人都知道我做错了什么?

2 个答案:

答案 0 :(得分:2)

使用此,

mysql_query("SELECT Code, Title, Domain, Status FROM tablename WHERE Domain='$Domain' ORDER BY Code");

将查询放在"..."中,并将'...'放在变量$Domain周围。

答案 1 :(得分:1)

您错过了SELECT

之前的报价
$result = mysql_query( SELECT Code, Title, Domain, Status FROM tablename WHERE Domain="$Domain" ORDER BY Code');
                      ^ right there

将其更改为:

$result = mysql_query('SELECT Code, Title, Domain, Status FROM tablename WHERE Domain="$Domain" ORDER BY Code');

但是, 您最好将其更改为:(并参阅下面有关预备语句的说明)

$result = mysql_query("SELECT Code, Title, Domain, Status FROM tablename WHERE Domain='$Domain' ORDER BY Code");
如果使用Domain='".$Domain."'失败,则

Domain='$Domain'

  

"如果我将$Domain换成直接文字,例如ABC,就可以了。"

A:这是因为正在传递的字符串很可能包含需要转义的字符。 I.e。:冒号,斜杠http://和点http://www.example.com等。

由于您使用ABC作为一个简单的字符串而没有任何其他东西妨碍SQL的执行,因此它已通过。

使用mysql_real_escape_string()会有所帮助,包括stripslashes()

即:$Domain = mysql_real_escape_string($_GET['Domain']);


重要提示

使用 mysqli_ with prepared statementsPDO with prepared statements,他们可以更好地使用 更安全。 因为目前的情况,您现有的代码可以SQL injection开放。

还必须使用错误报告:

or die(mysql_error())mysql_query(),它会发出代码中发现的错误信号。