我在PHP内使用查询:
$query = 'SELECT * from #__chronoforms_UploadAuthor where text_6 like "%'.$_GET['title'].'%" and text_7 like "%'.$_GET['author'].'%" limit 0,1';
我试图在限制中插入PHP变量而不是1 ..
$query = 'SELECT * from #__chronoforms_UploadAuthor where text_6 like "%'.$_GET['title'].'%" and text_7 like "%'.$_GET['author'].'%" limit 0,"'.$_GET['limit'].'"';
但它显示了一个错误。保留$_GET['limit']
会有一些错误。
答案 0 :(得分:4)
三件事:
您写出这些查询的方式有点难以理解。我个人更喜欢使用多行heredoc语法(如下所示),但这不是严格要求的;
任何用户输入都应通过mysql_real_escape_string()
以避免SQL injection次攻击。 注意:“用户输入”包括来自客户端的任何,包括Cookie,表单字段(普通或隐藏),查询字符串等;以及
您不需要引用LIMIT
子句的第二个参数,这可能是您问题的根源,这意味着将LIMIT 0,5
设为LIMIT 0,"5"
。
所以试试:
$title = mysql_real_escape_string($_GET['title']);
$author = mysql_real_escape_string($_GET['author']);
$limit = (int)$_GET['limit'];
$query = <<<END
SELECT *
FROM #__chronoforms_UploadAuthor
WHERE text_6 LIKE "$title%"
AND text_7 LIKE "%$author%"
LIMIT 0,$limit
END;
另外,一位评论员指出应该转义%
和_
。这可能是也可能不是。许多应用程序允许用户输入通配符。如果是这样,那么你就不应该逃避它们。如果你必须逃脱它们,那么处理它们:
$title = like_escape($limit);
function like_escape($str) {
return preg_replace('!(?|\\)((?:\\)*)([%_])!', '$1\$2', $str);
}
有点复杂的正则表达式试图阻止某人输入'\%'并获得'\%',然后转出反斜杠而不是'%'。
答案 1 :(得分:1)
哈希符号(#)在SQL中启动注释,看起来像是你的问题
答案 2 :(得分:1)
想要一堆可怕的答案!
一个。解决极限问题:
$limit = intval($_GET['limit']);
然后
...LIMIT 0, $limit
在查询中。
湾正如许多人所提到的那样,要清理$ _GET ['title']:
$title = mysql_real_escape_string($_GET['title']);
所以最终的代码必须是
$limit=intval($_GET['limit']);
$title = mysql_real_escape_string($_GET['title']);
$author = mysql_real_escape_string($_GET['author']);
$query = "SELECT * from #__chronoforms_UploadAuthor
WHERE text_6 like '$title' and text_7 like '%$author%'
LIMIT 0, $limit";
答案 3 :(得分:0)
您已将$_GET['limit']
括在双引号中,这是问题的根源。
试试这个:
$query = 'SELECT * from #__chronoforms_UploadAuthor where text_6 like "%'.$_GET['title'].'%" and text_7 like "%'.$_GET['author'].'%" limit 0,'.$_GET['limit'];
正如Cletus在这个答案中提到的那样,你需要解决许多更严重的问题。
答案 4 :(得分:0)
删除$ _GET ['limit']周围的双引号。不应引用LIMIT子句所采用的两个数字。
答案 5 :(得分:-1)
这应该有效:
$query = 'SELECT * from #__chronoforms_UploadAuthor where text_6 like "%'.$_GET['title'].'%" and text_7 like "%'.$_GET['author'].'%" limit 0,'.$_GET['limit'];
但你真的应该过滤传入的数据......
$query = 'SELECT * from #__chronoforms_UploadAuthor where text_6 like "%'.mysql_real_escape_string($_GET['title']).'%" and text_7 like "%'.mysql_real_escape_string($_GET['author']).'%" limit 0,"'.intval($_GET['limit']).'"';