微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我的原始查询是这样的:

$query = 
"SELECT * FROM sales_orders 
WHERE ksisoldby ILIKE '".$user."'";

这是我将其更改为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);
?>

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

解决方法:

通过使用预准备语句在PHP中合并prepare()和execute(),这些语句在使用PDO时可用.此扩展负责根据您选择的数据库驱动程序为数据库创建相应的PREPARE和EXECUTE语句.

以下是使用prepare()和execute()从the PHP manual改编的示例.

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

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

SELECT * FROM sales_orders 
    WHERE ksisoldby ILIKE 'something'

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐