我确实在这里遵循了解决方案:query():查询失败: ERROR:语法错误在或接近,但仍然有以下错误:
警告: pg_query():查询失败:错误:列"rosmoffi“不存在第1行:.“Code_Espece”=Rosmoffi ^
这是我的密码:
$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;
发布于 2017-06-12 21:39:49
$query = 'SELECT * FROM public."espece" where "espece"."Code_Espece" ='.$idd ;
别这么做。如果要输出在这里得到的内容,就会看到错误,就像从错误消息中看到的一样。变量$idd
中的任何内容都将按原样放入查询中,它将不被视为字符串。这只是查询的一部分。因此,由于没有引号,所以在本例中,它将被理解为列名。
最糟糕的是,如果$idd
来自用户,想想当有人将其设置为1; truncate table espece
时会发生什么。或者更糟的事。学习如何立即使用 参数 .
使用参数,您的代码如下:
$query = 'SELECT * FROM public."espece" where "espece"."Code_Espece" =$1';
if (!$result = pg_query_params($conn, $query, array($idd))){
这样,变量就被正确地赋予了数据库,并且没有注入漏洞。
NB!对于那些一直说双引号应该删除的人来说,不行。他们不应该。如果列名大写为Code_Espece
,那么如果没有引号,PostgreSQL就不会识别它。通常不推荐大写。
https://stackoverflow.com/questions/44513054
复制相似问题