最近,我收到一条错误消息,我不知道该如何处理。非常模糊。
我使用的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注入漏洞的经典示例。
读:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句