[英]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 (...)
但是,您的语法错误是您遇到的最小问题。 让我向您介绍一个经典:
您的查询遵循以下模式:
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.