【问题标题】:Php postgresql variables in a query查询中的 PHP postgresql 变量
【发布时间】:2017-04-17 20:24:57
【问题描述】:

我正在尝试为以下内容获取正确的语法。在这种情况下 $post_pub = 1

$sql='SELECT "Publications"."Pub_ID", "Publications"."ART_TITEL" FROM "Publications" where "Pub_ID"="$post_pub"';

php 抛出错误:列“$post_pub”不存在

我偶然发现了 pg_query_params,这感觉是正确的方向,但我需要一些帮助。我怎样才能让它工作?

【问题讨论】:

标签: php postgresql pg-query


【解决方案1】:

我从未使用过pg_connect,尽管我认为您需要这样的东西:

$sql='SELECT "Publications"."Pub_ID", "Publications"."ART_TITEL" 
FROM "Publications" 
where "Pub_ID"=$1 ';


$result = pg_query_params($dbconn, $sql, array($post_pub));

【讨论】:

  • 警告:pg_query_params():查询失败:错误:在“$”第 1 行或附近出现语法错误:...ns"."ART_TITEL" FROM "Publications" where "Pub_ID"=$post_pub ^ 在 ...
  • var dump 显示查询:string(103) "SELECT "Publications"."Pub_ID", "Publications"."ART_TITEL" FROM "Publications" where "Pub_ID"=$post_pub"
  • 好的,解决了,我确实把 $Pub_ID 改成了 $1,我假设你不能在这里重复变量。
【解决方案2】:

问题是变量周围的双引号。 Postgres 将其理解为“数据库对象”的名称,在这部分查询中,是一列。为避免这种情况,请尝试使用:

$sql='SELECT "Publications"."Pub_ID", "Publications"."ART_TITEL" FROM "Publications" where "Pub_ID"='."$post_pub";

还可以考虑迁移到 PDO - 这样的用法是对 sql 注入的直接邀请。例如,将$post_pub 设置为0 or (delete from Publications)" 将删除所有数据,如果用户有足够的权限。

【讨论】:

  • 更改此错误后:警告:pg_query():查询失败:错误:“$”第 1 行或附近的语法错误:...ns"。"ART_TITEL" FROM "Publications" where " Pub_ID"=$post_pub ^ in ...
  • 我需要使用 pg_prepare 和 pg_execute 吗?在使用 mysql 多年后,我是 postgresql 的菜鸟。
  • @GaryNobles 是的
  • 感谢您编辑代码,我使用的是 pg_connect 而不是 PDO,代码不起作用,引发 http 500 错误。
  • @Oto 的建议更可取 - 使用 pg_query_params
猜你喜欢
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-02
相关资源
最近更新 更多