我现在已经坚持了一段时间,我知道非常初学者,但找不到任何类似的问题。
我正在尝试显示我上一个主题的详细信息,但我收到了警告。
*Warning: pg_exec() [<a href='function.pg-exec'>function.pg-exec</a>]:
Query failed:
ERROR: operator does not exist: character varying = integer LINE 4: WHERE
t_cat = 3 ^
HINT: No operator matches the given name and argument type(s). You
might need to add explicit type casts.*
任何帮助表示赞赏
$topicsearh = pg_exec($db,
"SELECT t_id, t_subject, t_date, t_cat
WHERE t_cat = " . $row['s_id'] . "
ORDER BY t_date DESC LIMIT 1"
);
if(!$topicsearh){
echo 'Last topic could not be displayed.';
}
else{
while($trow = pg_fetch_assoc($topicsearh))
echo '<a href="topicview.php?id=' . $trow['t_id'] . '">' . $trow['t_subject'] .
'</a> at ' . date('d-m-Y', strtotime($trow['t_date']));
}
答案 0 :(得分:3)
您需要定义FROM
表。
示例强>
SELECT t_id, t_subject, t_date, t_cat FROM TABLE_NAME WHERE...
----------^^^^^^^^^^^^^^^-----
并且如下所示。
WHERE t_cat = '". $row['s_id'] ."'
答案 1 :(得分:2)
@Dipesh is right about the missing FROM
clause时,手头的错误指向查询中的另一个问题。 t_cat
显然属于character varying
类型。因此,您必须将其与匹配的字符串常量进行比较。但是您输入的是数字常量而没有单引号。
PHP(或MySQL)传统上倾向于默默地吞下这样的错误并做他们认为“最好”的事情(这不是他们能做的最好的事情)。 PostgreSQL幸运的是没有。它迫使你明确无误。
应该是:
WHERE t_cat = '" . $row['s_id'] . "' ORDER BY t_date DESC LIMIT 1"
而不是:
WHERE t_cat = " . $row['s_id'] . " ORDER BY t_date DESC LIMIT 1"
阅读手册中的Constants一章,特别是String Constants和Numeric Constants。