Php 带字符串插值的准备语句失败,出现语法错误

Php 带字符串插值的准备语句失败,出现语法错误,php,postgresql,prepared-statement,Php,Postgresql,Prepared Statement,我正在尝试使用准备好的语句对PHP和Postgres进行简单的插入。到目前为止,我已经做到了: <?php $conn_string = "host=localhost port=5432"; // plus us/pw $dbconn = pg_connect($conn_string); $table = 'business_primary_category'; $column = 'primary_category'; $tag = 'restuarant'; // Pre

我正在尝试使用准备好的语句对PHP和Postgres进行简单的插入。到目前为止,我已经做到了:

<?php
$conn_string = "host=localhost port=5432"; // plus us/pw
$dbconn = pg_connect($conn_string); 

$table  = 'business_primary_category';
$column = 'primary_category';
$tag = 'restuarant';


// Prepare a query for execution
$result = pg_prepare($dbconn, "my_query", 'SELECT * FROM $table WHERE $column = $1');

// Execute the prepared query.  Note that it is not necessary to escape
// the string "Joe's Widgets" in any way
$result = pg_execute($dbconn, "my_query", array("$tag"));

?>

跳出来的第一件事。。。使用双引号从$table中选择*,其中$column=$1'

跳出的第一件事。。。在“
”上使用双引号,从$table中选择*,其中$column=$1”

如果希望对变量进行插值,则需要使用双引号;否则PHP将其视为字符串文本。尝试:

$result = pg_prepare($dbconn, "my_query", "SELECT * FROM $table WHERE $column = $1");

如果你想要你的变量被插值,那么你需要使用双引号;否则PHP将其视为字符串文本。尝试:

$result = pg_prepare($dbconn, "my_query", "SELECT * FROM $table WHERE $column = $1");

要计算的变量可能需要在查询周围加双引号。要计算的变量可能需要在查询周围加双引号。您好。谢谢这无疑消除了错误。整洁的我担心我必须安装某种PDO包。PDO是一个访问数据库的库,它将取代现有的
pg.*
函数。建议使用PDO,因为它可以轻松地编写更安全的代码—它支持准备好的语句和绑定参数,而基本的
mysql\uz
函数不支持这些。既然您已经使用了这些,就不需要为了安全起见在PDO中重写所有内容。啊,太好了。所以我要说清楚。现在,我使用了这个预先准备好的语句
stuff
,这些用户提供的字符串肯定已经被充分地转义了。如果唯一基于用户的输入是在变量中,那么是的,如果您将它们作为绑定参数传递进来,那么您是安全的。如果您直接在SQL中使用用户生成的内容,那么您在代码中没有,如果
$table
$column
是用户生成的,您可能仍然会遇到问题,因为它们在查询中直接进行,根本没有被清理。哦。我应该如何消毒它们?只需要一个
真正的\u escape\u字符串
?我听说这件事即将结束。我应该考虑一下切换到PDO吗?这只是mysql,还是postgre也将其内置到php中?谢谢你的帮助!你好谢谢这无疑消除了错误。整洁的我担心我必须安装某种PDO包。PDO是一个访问数据库的库,它将取代现有的
pg.*
函数。建议使用PDO,因为它可以轻松地编写更安全的代码—它支持准备好的语句和绑定参数,而基本的
mysql\uz
函数不支持这些。既然您已经使用了这些,就不需要为了安全起见在PDO中重写所有内容。啊,太好了。所以我要说清楚。现在,我使用了这个预先准备好的语句
stuff
,这些用户提供的字符串肯定已经被充分地转义了。如果唯一基于用户的输入是在变量中,那么是的,如果您将它们作为绑定参数传递进来,那么您是安全的。如果您直接在SQL中使用用户生成的内容,那么您在代码中没有,如果
$table
$column
是用户生成的,您可能仍然会遇到问题,因为它们在查询中直接进行,根本没有被清理。哦。我应该如何消毒它们?只需要一个
真正的\u escape\u字符串
?我听说这件事即将结束。我应该考虑一下切换到PDO吗?这只是mysql,还是postgre也将其内置到php中?谢谢你的帮助!