我正在尝试在查询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
正确拉出。
任何人都知道我做错了什么?
答案 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 statements或PDO with prepared statements,他们可以更好地使用 更安全。 因为目前的情况,您现有的代码可以SQL injection开放。
还必须使用错误报告:
和
or die(mysql_error())
到mysql_query()
,它会发出代码中发现的错误信号。