簡體   English   中英

Relation * tablename *不存在

[英]Relation *tablename* does not exist

最近我收到一條錯誤消息,我不知道如何處理。 這很模糊。

我使用的PostgreSQL語句是:

    $result = pg_query($ruledbconnection, "INSERT INTO INPUT(num, pkts, bytes ,
    target,prot, opt, \"in\", out, source, destination, id) 
    VALUES('$num','$bytes','$pkts','$target', '$opt', '$protocol', '$in', '$out',
   '$source', '$destination', '$id')");

一切似乎都很好,對吧? 但是,當我使用變量執行此查詢時:

ERROR: syntax error at or near "'INPUT'" LINE 1: INSERT INTO 'INPUT'(num, pkts, bytes ,
target, prot, opt, "i... ^

我已經堅持了一段時間,它可能是因為在PHP中逃脫,或者可能是別的什么?

我想要操作的表在我的數據庫中稱為INPUT。

您顯示的SQL與錯誤不匹配。 SQL在表名周圍沒有引號,錯誤確實如此。

ERROR: syntax error at or near "'INPUT'" LINE 1: INSERT INTO 'INPUT'(num, pkts, bytes ,

所以。 單引號(撇號, ' )用於SQL ,而不是標識符 標識符引用雙引號( " )。所以你寫道:

INSERT INTO "INPUT" (...) VALUES (...)

請注意,引用表名稱將保留大小寫 所以,如果你在這里加倍引用它,你必須在引用它的任何地方引用它。 如果你只使用小寫,你將保存你的理智:

INSERT INTO input (...) VALUES (...)

甚至更好,一個描述性的表名:

INSERT INTO packets_received (...) VALUES (...)

但是,您的語法錯誤是您遇到的最小問題。 讓我向您介紹一個經典:

SQL注入 -  XKCD

您的查詢遵循以下模式:

pg_query($conn, 'INSERT INTO sometable (col) VALUES ($user_input)')

因此,是SQL注入漏洞的典型示例。

讀:

通過確保我逃脫表名周圍的引號來解決。

"INSERT INTO INPUT (num, pkts, bytes , target, prot, opt, \"in\", out, source, destination, id)

應該:

"INSERT INTO \"INPUT\" (num, pkts, bytes , target, prot, opt, \"in\", out, source, destination, id)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM