我发了一个分页问题:
$num_por_pagina = 5;
$paginac = $_GET[paginac];
if (!$paginac) {
$paginac = 1;
}
我想只使用整数来避免PHP / SQL注入
例如访问:
http://www.mysite.com/index.php?paginac=3.3或http://www.mysite.com/index.php?paginac=3,3
结果您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第7行的“4.6,2”附近使用正确的语法
自:
访问www.mysite.com/index.php?paginac=3.3或www.mysite.com/index.php?paginac=3,3
结果错误,此页面无效。
答案 0 :(得分:1)
缺少引号
$paginac = $_GET["paginac"];
也
www.mysite.com/index.php?page=3.3
您将“page”作为get参数传递,捕获该参数而不是“paginac”
$paginac = $_GET["page"];
如果您在mysql中收到错误,请发布该代码。
答案 1 :(得分:1)
如果你知道你将收到一个号码(或者就此而言),你可以把它作为第一道防线:
$paginac = (int) $_GET['page'];
page
表示常量。您应该使用密钥的引号。
如果您收到非数字字符串,则只需要请求第0页。
其次,你需要正确地阅读how to prevent injections,而不是仅仅使用一些黑客来在大多数情况下正确使用它。
答案 2 :(得分:1)
尝试
$paginac = intval($_GET[paginac]);
答案 3 :(得分:0)
看起来is_numeric()
的测试仍然允许编写和执行SQL语句,这会引发错误。
确保如果GET变量不是数字,则查询不会执行。
此外,在访问关联数组索引时使用引号。如果您通过get:
传递 paginac$paginac = $_GET['paginac'];
如果您通过get:
传递页面$paginac = $_GET['page'];
答案 4 :(得分:-1)
我会做这样的事情:
if ($paginac < 2)
{
$paginac = 1;
}
如果它仍然是一个字符串,PHP会将变量强制转换为1,因此这个方法会将任何文本转换为1并且还有助于反对负数