如何通过Ajax请求传递查询

时间:2016-07-24 23:07:15

标签: php mysql ajax wamp

我正在使用Ajax请求对一些数据进行分页。当按下其中一个页码按钮时,它会向一个单独的文件发送请求以生成表格中的下一页。

在我的主页上,我会有类似的内容:

$query = "Select * from table WHERE field =  'something' LIMIT 5";
$result = mysqli_query($con, $query);
$row = mysqli_fetch_assoc($result);

// dump results as table

当我编写脚本以创建一个新的xmlhttp请求对象到我的“paginate.php”文件时,如何将相同的查询带到文件中,因为它可能会根据用户输入动态更改?

我想通过POST请求将整个查询字符串作为函数参数传递,但我想知道是否有更有效的方法来执行此操作。

1 个答案:

答案 0 :(得分:2)

  

我在考虑将整个查询字符串作为函数传递   参数通过POST请求

绝对不要这样做!让浏览器(即用户)直接针对您的数据库运行查询确实是真正错误的安全做法。我在早期犯了这个错误,我的网站很快就出现了。

您的PHP文件应该接受参数,验证它们,然后使用它们来运行查询

1。您XHR对象发送:page_number=5

2. 您的PHP验证输入并动态构建查询:

//set page to 1 if none was provided. 
$pg = isset($_POST['page_number'])? (int)$_POST['page_number']: 1;
$pg = max(1,$pg); // lowest allowed pg number is 1

获得页码后,您确定它是一个整数(而不是用户发送到您服务器的一些恶意SQL命令),您可以在查询中使用它:

$size = 5; //# of results per page
$start = ($pg-1) * 5;   
$query = "SELECT * from myTable WHERE field='something' LIMIT $start,$size";

请注意,如果字段值something来自用户,则您不希望将其直接包含在查询中(这适用于任何用户提供的值)。相反,您应该使用预准备语句参数化查询

资源:https://www.owasp.org/index.php/SQL_Injection