我有一个sql查询,以获取数据从数据库在php。我正在使用限制来限制数据。我需要根据url中的id限制数据。
如何在sql查询中调用id。我尝试了以下方法,但显示错误:
$response=mysqli_query($con,"select * from prometric ORDER BY RAND() LIMIT echo $_GET['id']; ");
错误是
分析错误:语法错误,意外的'‘(T_ENCAPSED_AND_WHITESPACE),应为'-’或标识符(T_STRING)或变量(T_VARIABLE)或数字(T_NUM_STRING)在第14行
上的C:\xampp\htdocs\nurse\prometricajax.php中
发布于 2018-06-08 20:40:53
更糟糕的是,如果你做得“正确”,你的应用程序中就会有一个SQL injection漏洞。
die('the following appears to work but is unsafe');
$response=mysqli_query($con,"select * from prometric ORDER BY RAND() LIMIT $_GET[id]; ");
我在上面已经死了,因为没有人应该使用这样的代码。
例如:被称为
https://you.example.com/thing.php?id=1%3btruncate+prometric%3bcommit
可以删除prometric表中的所有内容。
至少要这样做。
$response=mysqli_query($con,"select * from prometric ORDER BY RAND() LIMIT ".(0+$_GET['id']));
上面通过添加0来强制$_GET['id']
为一个数字,这应该会阻止所有的注入攻击,最糟糕的是使用一个大的数字,并产生一个数字太大的错误,等等。
但可能需要更好的消毒。例如:将$_GET['id']
复制到一个变量中,并检查是否在可接受的范围内,然后在SQL中使用它。
发布于 2018-06-08 20:41:37
你所拥有的非常非常接近。那里的额外回声和;是导致您出现问题的原因。试一试
$response=mysqli_query($con,"select * from prometric ORDER BY RAND() LIMIT " . $_GET['id']);
https://stackoverflow.com/questions/50768288
复制相似问题