是否使用php正确编写PostgreSQL准备/执行语句?
我听说在SQL语句中使用是否使用php正确编写PostgreSQL准备/执行语句?,php,sql,postgresql,Php,Sql,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
和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);
?>
您可以通过使用prepared语句在PHP中合并prepare()
和execute()
,这些语句在使用时可用。此扩展负责根据您选择的数据库驱动程序为数据库创建相应的PREPARE
和EXECUTE
语句
下面是一个使用prepare()
和execute()
改编的示例
这将为您处理参数转义,并创建类似以下内容的SQL语句:
SELECT * FROM sales_orders
WHERE ksisoldby ILIKE 'something'
因此,您需要修改上述代码,以便在对prepare()
的调用中包含SQL语句,这要求您在希望包含参数的位置添加占位符。然后调用execute()
,它将添加传递给它的值。您也可以使用,易于使用且安全。是的,您应该在新代码中使用PDO。这不是有效的PHP语法。@nickb是的,您是对的。现在回想起来,我不知道如何将prepare/execute
合并到php中。。我明白了,我现在所说的毫无意义。我认为你应该简化你的例子,学习如何使用准备好的语句。我们已经讨论过这个问题,这绝对是个好主意。已修复。感谢您提供此解决方案。两个问题:我是否将始终使用值数组为PREPARE
语句提供值。我是否需要设置$dbh
或者它是否准备好接受PREPARE
方法而无需额外准备?除了防止SQL注入之外,这还有什么好处吗?再次感谢!您需要通过调用PDO的构造函数来初始化$dbh
,有关详细信息,请参阅手册。您从来不会自己形成PREPARE
语句,而是让PDO为您处理。因此,您只需提供要执行的SQL语句,然后让PDO来完成其余的工作。
SELECT * FROM sales_orders
WHERE ksisoldby ILIKE 'something'