使用php正确编写PostgreSQL准备/执行语句?

125*_*748 3 php sql postgresql

我听说使用PREPAREEXECUTE在SQL语句中将用户提供的数据清理为无法注入SQL的内容.这是真的?

我的原始查询是这样的:

$query = 
"SELECT * FROM sales_orders 
WHERE ksisoldby ILIKE '".$user."'";
Run Code Online (Sandbox Code Playgroud)

这是我将其更改为prepare/execute语句的最佳猜测:

 <?php
$id = $_POST['id'];
$search = $_POST['user_supplied_search_term'];

PREPARE search_query_function (varchar, varchar) AS

SELECT * FROM sales_orders 
WHERE ksisoldby ILIKE '$1'";

EXECUTE search_query_function($id, $search);
?>
Run Code Online (Sandbox Code Playgroud)

这是正确编写/调用的吗?PDO我也读过一些内置的php对象().我应该使用它们还是结合使用?感谢您对此类广泛问题的帮助.

nic*_*ckb 5

您合并prepare(),并execute()在PHP中使用预处理语句,当你使用的是可用的PDO.这种扩展是负责创建适当的PREPARE,并EXECUTE根据您所选择的数据库驱动程序的数据库语句.

以下是使用和改编自PHP手册的示例.prepare()execute()

$sth = $dbh->prepare('SELECT * FROM sales_orders 
    WHERE ksisoldby ILIKE ?');
$sth->execute( array( $_POST['user_supplied_search_term']));
Run Code Online (Sandbox Code Playgroud)

这将为您处理参数转义并创建类似于以下内容的SQL语句:

SELECT * FROM sales_orders 
    WHERE ksisoldby ILIKE 'something'
Run Code Online (Sandbox Code Playgroud)

因此,您需要调整上面的代码以在调用中包含您的SQL语句prepare(),这需要您将占位符添加到您希望包含参数的位置.然后你调用execute(),它将添加传递给它的值.