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

时间:2017-06-13 05:33:23

标签: php database postgresql

我确实遵循了这里的解决方案:Warning: pg_query(): Query failed: ERROR: syntax error at or near但我仍然遇到以下错误:

  

警告:pg_query():查询失败:错误:列“rosmoffi”不存在第1行:... FROM public。“espece”where“espece”。“Code_Espece”= Rosmoffi ^

这是我的代码:

public class SqliteConnect {
    private static SqliteConnect conn ;

    public static Connection dbConnector(){

        try{
            Class.forName("org.sqlite.JDBC");
            Connection conn = DriverManager.getConnection("jdbc:sqlite:C:\\Users\\Downloads\\InternArchive\\InternArchive\\InternDB\\InternshipDB.sqlite");
            JOptionPane.showMessageDialog(null, "Veritabanına Başarı ile Bağlanıldı!");
        }
        catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
            return null;

        }
    }
}

1 个答案:

答案 0 :(得分:1)

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

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

最糟糕的部分是,如果$idd来自用户,请考虑当有人将其设置为1; truncate table espece时会发生什么。或者更坏的事情。 立即了解如何使用parameters

使用您的代码参数:

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

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

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