2014-01-14 39 views
0

最近我收到一條錯誤消息,我不知道該如何處理。這非常含糊。關係* tablename *不存在

我使用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逃避它可能是由於,也許別的東西嗎?

,我要處理的表被稱爲我的數據庫中輸入..

+1

你真正需要的表名後加上一個空格'INPUT(NUM,' – Fabio

+0

遺憾的是仍然得到幾乎同樣的錯誤! '錯誤:關係「input」不存在LINE 1:INSERT INTO INPUT(num,pkts,bytes,target,prot,opt,「in ... ^' – MichaelP

+0

嘗試引用表標識符 – abidibo

回答

2

您呈現不匹配錯誤的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 Injection - XKCD

您的查詢如下格局:

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

,因此,是an SQL injection vulnerability一個典型的例子。

閱讀:

0

通過確保我逃避在我的表名引號解決。

"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) 
+2

請參見http:// www。 postgresql.org/docs/current/static/sql-keywords-appendix.html – abidibo

+1

你還沒有逃過名字,你引用了它,然後逃脫了引號。 –

+0

編輯,謝謝@ MilenA.Radev – MichaelP

相關問題