Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否使用php正确编写PostgreSQL准备/执行语句?_Php_Sql_Postgresql - Fatal编程技术网

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

是否使用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']

我听说在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);
?>

您可以通过使用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'