Php pg_query():查询失败:错误:列不存在
我确实遵循了这里的解决方案:但仍然出现以下错误: 警告:pg_query():查询失败:错误:列“rosmoffi”不存在第1行:。。。来自公众。“espece”其中“espece”。“Code_espece”=罗斯莫菲^ 这是我的代码:Php pg_query():查询失败:错误:列不存在,php,database,postgresql,Php,Database,Postgresql,我确实遵循了这里的解决方案:但仍然出现以下错误: 警告:pg_query():查询失败:错误:列“rosmoffi”不存在第1行:。。。来自公众。“espece”其中“espece”。“Code_espece”=罗斯莫菲^ 这是我的代码: $conn = pg_connect($conn_string); $query = 'SELECT * FROM public."espece" where "espece"."Code_Espece" ='.$idd ; if (!$result = p
$conn = pg_connect($conn_string);
$query = 'SELECT * FROM public."espece" where "espece"."Code_Espece" ='.$idd ;
if (!$result = pg_query($conn, $query)){
echo pg_result_error ($conn);
return false;
}
$result = db($result);
return $result;
不要这样做。如果您要输出您在这里得到的内容,您将看到错误,正如您应该从错误消息中看到的那样。变量$idd
中的任何内容都将按原样放入查询中,并且不会将其视为字符串。这只是查询的一部分。因此,由于没有引号,因此在本例中它将被理解为一个列名
最糟糕的是,如果$idd
来自用户,请思考当有人将其设置为1时会发生什么;截断表EXPE
。或者更糟的事情学习如何立即使用。
使用参数,您的代码将是:
$query = 'SELECT * FROM public."espece" where "espece"."Code_Espece" =$1';
if (!$result = pg_query_params($conn, $query, array($idd))){
通过这种方式,变量被正确地分配给数据库,并且没有注入漏洞
注意!对于那些一直说应该删除双引号的人,不,他们不应该。如果列名大写为
code\u spece
,则没有引号的PostgreSQL将无法识别它。通常不建议使用大写。您的$idd值没有被引用,因此假定它是一个列名。使用参数,不要连接字符串。@NishantSolanki我确实尝试过,但也遇到了同样的错误。@SamiKuhmonen我不知道这是什么意思?请参阅我的答案并阅读有关参数的文档。我确实了解了您的建议,但我不知道如何用this@MohamedRedaAguezzoul通过不将$idd连接到SQL字符串,而是通过参数。如果您这样做了,并且出现了另一个错误,那么请使用详细信息更新问题。@Mohamedredadaaguezzoul我添加了代码示例如何完成警告:pg_query_params()希望参数3是数组,字符串在C:\wamp64\www\formdata1.php行中给出21@MohamedRedaAguezzoul你把参数给错了。请参阅我编辑的答案。参数必须在数组中。
$query = 'SELECT * FROM public."espece" where "espece"."Code_Espece" =$1';
if (!$result = pg_query_params($conn, $query, array($idd))){