我已经读过这个:Cannot simply use PostgreSQL table name ("relation does not exist")
但我仍有问题。我从表单中提取选择的结果并将其传递给PHP脚本以显示数据库中已存在的所选表的内容。
错误: 警告:pg_query():查询失败:错误:关系“public.msysqueries1”不存在第1行:SELECT * FROM public.MSysQueries1; ^在第12行的C:\ xampp \ htdocs \ phpTest \ showTable.php
无论我使用什么方式引用,转义字符串,或者不是,它在实际查询中强制表的名称为小写,即使它在字符串中正确格式化。我已经回显了从表单中输入的字符串,它的格式与PostgreSQL中表名的情况相匹配......如何让PHP停止强制它为小写?
$whatever = $_POST['tableID'];
$table2string = (string)"$whatever";
$escapedTable = pg_escape_string($table2string);
$db = pg_connect("host=localhost port=5432 dbname=name user=user password=password");
$query = "SELECT * FROM public." . "$escapedTable" . ";";
$result = pg_query($db, $query);
答案 0 :(得分:0)
Pgsql小写所有未放在引号之间的名称。要在字符串周围加上引号,您应该使用'或\"像这样:
$query = 'SELECT * FROM public."' . $escapedTable . '";';
或
$query = "SELECT * FROM public.\"$escapedTable\";";
注意,当你执行" $ escapedTable"时,你只是将$ escapedTable转换为字符串,而不是用引号转义它。