我有一个用PHP编写的应用程序,我正在连接到PGSQL数据库并选择一些数据。在查询中使用字符串串联操作员(||)之前,这是按预期工作的。
。我通过pgadmin连接了pgsql db并生成查询,所以我知道它肯定有效。然后,我复制代码并将其粘贴到我的$query
变量中。
我的代码在下面;
$dbconn = pg_connect("host=xxx dbname=xxx user=xxx password=xxx") or die('Could not connect: ' . pg_last_error());
$query = '
SELECT
f.date_gmt::date as "Date Assessed"
n.last_name || ', '' || n.first_name AS "Full Name" // line 12
FROM
fines as f
JOIN
record_metadata as r
ON
r.id = f.record_metadata_id
JOIN
fullname as n
ON
n.id = f.record_metadata_id
';
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
echo "<table>n";
while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {
echo "t<tr>n";
foreach ($line as $col_value) {
echo "tt<td>$col_value</td>n";
}
echo "t</tr>n";
}
echo "</table>n";
pg_free_result($result);
pg_close($dbconn);
产生的错误是;
解析错误:语法错误,意外',' /...index.php在第12行
从代码中删除第12行可以解决该问题。但是,我需要这些数据,所以我需要更改以实现我想要的东西?
大概我不能简单地从PGSQL DB复制工作查询并将其粘贴到我的PHP代码中?
您没有逃脱报价符号 '
。您有2个选项。
第1次以斜杠逃脱他们:
n.last_name || ', '' || n.first_name AS "Full Name"
第二个(建议)只使用Heredoc符号:
$query = <<<QUERY
SELECT
f.date_gmt::date as "Date Assessed"
n.last_name || ', '' || n.first_name AS "Full Name"
FROM
fines as f
JOIN
record_metadata as r
ON
r.id = f.record_metadata_id
JOIN
fullname as n
ON
n.id = f.record_metadata_id
QUERY;
示例在这里。
||
是Postgres的串联操作员。我认为您在那里有错字,这条线
n.last_name || ', '' || n.first_name AS "Full Name"
具有错别字,应为
n.last_name || '', '' || n.first_name AS "Full Name"
您在单个引号界定的字符串中有单引号:
'SELECT * FROM foo WHERE id = '123''
您需要逃脱它们。IIRC,Postgres使用双单打来做到这一点:
'SELECT * FROM foo WHERE id = ''123'''
或后斜切:
'SELECT * FROM foo WHERE id = '123''