我有一个脚本,应该根据用户点击上一页的链接显示Postgres查询的结果。
例如,当用户单击项目的标题时,它会将它们定向到一个页面,该页面向他们显示有关项目的更多属性,这些属性包含在数据库的列中。
我已经让页面工作,用户可以点击标题,但是一旦他们点击标题,我的第二页显示项目的其他属性就不起作用了。
<?php
ini_set('display_errors',1); error_reporting(E_ALL);
$row = false;
if (isset($_GET['pid']) && filter_var($_GET['pid'], FILTER_VALIDATE_INT, array('min_range' => 1)) ) {
$pid = $_GET['pid'];
require('/var/www/postgres_connect.php');
$q = 'SELECT * FROM public.' + "tblProjects" + 'WHERE ' + "tblProjects" + '.ProjectID = ' + "$pid";
$r = pg_query ($dbconn, $q);
if (pg_num_rows($r) == 1) {
$row = pg_fetch_assoc ($r);
$page_title = $row['ProjectID'];
echo "<div align=\"center\">
<b>{$row['ProjectID']}</b> by
{$row['ProjectTitle']}<br />";
echo '<p align="center">' . ((is_null($row['totalcost'])) ? '(No Cost Recorded)' :
$row['totalcost']) . '</p>';
}
pg_close($dbconn);
}
if (!$row) {
$page_title = 'Error';
echo '<div align="center">This page encountered an error!</div>';
}
?>
运行此脚本会产生以下错误:
警告:pg_query():查询失败:错误:语法错误在“20131418”第1行:20131418 ^或附近第13行/var/www/html/view_project.php
警告:pg_num_rows()期望参数1为资源,第14行/var/www/html/view_project.php中给出布尔值
现在,我不认为第二个错误是一个问题,因为解决第一个错误会产生查询结果,然后清除第二个错误。
我不明白语法有什么问题;在查询末尾有$pid
会返回一个整数(20131418),该整数被称为无效语法。我该怎么做才能解决这个问题?
答案 0 :(得分:1)
SQL语句的正确语法如下:
'SELECT * FROM public."tblProjects" WHERE "tblProjects"."ProjectID"=' . $pid;
这首先不起作用的主要原因是因为列名和表名的混合情况。
查看类似问题的答案:https://stackoverflow.com/a/12250721/3620249
我原以为$pid
需要在查询字符串中(单引号)。但是,除非查询字符串是双引号,否则不会调用该变量。然后,使用引号管理列/表名称中的混合个案变得很困难,因此我尝试使用+
来连接而不是.
,正如您在我的问题中所看到的那样。
经验教训:
.