PHP Select 来自 Postgres 意外字符
PHP Select From Postgres Unexpected Character
我有一个用 PHP 编写的应用程序,我正在连接到 PGSQL 数据库并选择一些数据。这按预期工作,直到我在查询中使用字符串连接运算符 (||)。
我通过 PGadmin 连接到 PGSQL 数据库并生成了查询,所以我知道它绝对有效。然后我复制代码并将其粘贴到我的 $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 "\t\t<td>$col_value</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
pg_free_result($result);
pg_close($dbconn);
产生的错误是;
Parse error: syntax error, unexpected ',' in
/...index.php on line 12
从代码中删除第 12 行可以解决问题。但是,我需要这些数据,那么我需要更改什么才能实现我想要的?
大概我不能简单地从 PGSQL 数据库复制工作查询并将其粘贴到我的 PHP 代码中?
您在由单引号分隔的字符串中有单引号:
'SELECT * FROM foo WHERE id = '123''
你需要逃离他们。 IIRC,Postgres 使用双单打来做到这一点:
'SELECT * FROM foo WHERE id = ''123'''
或者反斜杠:
'SELECT * FROM foo WHERE id = \'123\''
您没有转义引号 '
。
你有两个选择。
第一次用反斜杠转义:
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;
例子here.
||
是 Postgres 的串联运算符。我认为你有错字,这一行
n.last_name || ', '' || n.first_name AS "Full Name"
有错字,应该是
n.last_name || '', '' || n.first_name AS "Full Name"
我有一个用 PHP 编写的应用程序,我正在连接到 PGSQL 数据库并选择一些数据。这按预期工作,直到我在查询中使用字符串连接运算符 (||)。
我通过 PGadmin 连接到 PGSQL 数据库并生成了查询,所以我知道它绝对有效。然后我复制代码并将其粘贴到我的 $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 "\t\t<td>$col_value</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
pg_free_result($result);
pg_close($dbconn);
产生的错误是;
Parse error: syntax error, unexpected ',' in /...index.php on line 12
从代码中删除第 12 行可以解决问题。但是,我需要这些数据,那么我需要更改什么才能实现我想要的?
大概我不能简单地从 PGSQL 数据库复制工作查询并将其粘贴到我的 PHP 代码中?
您在由单引号分隔的字符串中有单引号:
'SELECT * FROM foo WHERE id = '123''
你需要逃离他们。 IIRC,Postgres 使用双单打来做到这一点:
'SELECT * FROM foo WHERE id = ''123'''
或者反斜杠:
'SELECT * FROM foo WHERE id = \'123\''
您没有转义引号 '
。
你有两个选择。
第一次用反斜杠转义:
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;
例子here.
||
是 Postgres 的串联运算符。我认为你有错字,这一行
n.last_name || ', '' || n.first_name AS "Full Name"
有错字,应该是
n.last_name || '', '' || n.first_name AS "Full Name"