Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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 pg_query():查询失败:错误:列不存在_Php_Database_Postgresql - Fatal编程技术网

Php pg_query():查询失败:错误:列不存在

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

我确实遵循了这里的解决方案:但仍然出现以下错误:

警告: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 = 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))){