首页 文章

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

提问于
浏览
0

我确实按照这里的解决方案:Warning: pg_query(): Query failed: ERROR: syntax error at or near但我仍然有以下错误:

警告:pg_query():查询失败:错误:列“rosmoffi”不存在LINE 1:... FROM public . “espece”where“espece” . “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;

1 回答

  • 1
    $query = 'SELECT * FROM public."espece" where "espece"."Code_Espece" ='.$idd ;
    

    不要这样做 . 如果你要输出你在这里得到的内容,你会看到错误,正如你应该从错误信息中看到的那样 . 变量 $idd 中的任何内容都将按原样放入查询中,并且不会被视为字符串 . 它只是查询的一部分 . 因此,由于没有引号,在这种情况下它将被理解为列名 .

    最糟糕的部分是,如果 $idd 来自用户,那么当有人将其设置为 1; truncate table espece 时会发生什么 . 或者更坏的事情 . Learn how to use parameters immediately.

    使用您的代码参数:

    $query = 'SELECT * FROM public."espece" where "espece"."Code_Espece" =$1';
    if (!$result = pg_query_params($conn, $query, array($idd))){
    

    这样,变量就可以正确地提供给数据库,并且没有注入漏洞 .

    NB!对于那些一直说要删除双引号的人,没有 . 他们不应该 . 如果列名大写为 Code_Espece ,那么PostgreSQL将不会在没有引号的情况下识别它 . 通常不建议使用资本化 .

相关问题