从sql查询中的url获取id

时间:2018-06-08 05:47:29

标签: mysql php

我有一个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)在C:\ xampp \ htdocs \ nurse \ prometricajax.php上线14

2 个答案:

答案 0 :(得分:2)

可能更糟糕的是,如果你“正确”,你的应用程序中会出现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中使用它之前检查它是否在可接受的范围内。

答案 1 :(得分:2)

你所拥有的非常接近。那里的额外回声伴随着;是什么导致你的问题。尝试

$response=mysqli_query($con,"select * from prometric ORDER BY RAND() LIMIT " . $_GET['id']);