【问题标题】:(PHP/Postgresql) Call a function which returns void?(PHP/Postgresql) 调用返回 void 的函数?
【发布时间】:2017-12-05 05:25:50
【问题描述】:

我正在疯狂地尝试在 PHP 代码中调用一个返回 void 的函数,使用 pg_prepare/pg__execute...

$result = pg_prepare($dbconn, "",'SELECT * FROM dungeonasdb.crea_personaggio( "$nome", "$descrizione", "$email", "$password")');
$result = pg_execute($dbconn, "", NULL ) or die('Query creazione fallita');

pg_prepare/pg_execute 的设置是否有我做错的地方? 谢谢

【问题讨论】:

  • dungeonasdb.crea_personaggio 是你的表名吗?

标签: php html postgresql web


【解决方案1】:

你可能想做一些不同的事情:

pg_prepare:不要放具体的值,而是放占位符。稍后您将它们绑定到值。我更喜欢总是给语句起个名字。

如果dungeonasdb.crea_personaggio是返回void的函数,你可以通过以下方式调用它:

SELECT dungeonasdb.crea_personaggio(...)

您不能通过SELECT * FROM dungeonasdb.crea_personaggio(...) 调用您的函数,因为这意味着dungeonasdb.crea_personaggioset returning function,但不是。

所以你可能希望你的陈述是:

$result = pg_prepare($dbconn, "crea_personnagio", 
   'SELECT dungeonasdb.crea_personaggio($1, $2, $3, $4)'); 
$result = pg_execute($dbconn, "crea_personnagio", 
    ARRAY($nome, $descrizione, $email, $password)) 
    or die('Query execuzione fallita');

您的第二个语句是pg_execute 语句,它将参数绑定到占位符($1,...),然后执行。

【讨论】:

  • 好的我解决了这个问题,它是数据库中的函数,我只使用表名而不是像 'dbname.tablename' 编写了所有函数。另外我认为您的回答不正确,因为 PERFORM 仅在 postgresql 函数内部有效,您不能从外部使用它。但是感谢您的时间:)
  • PERFORM 是对的。我已经纠正了。在 PostgreSQL 中,您实际编写的是 schema_name.function_name(...)schema_name.table_name(或者,通常是 schema_name.object_name)。您不能从同一连接访问两个数据库(通过 FDW 除外)。在 PostgreSQL 中,你有 database -> schema -> object。在 MySQL(例如)中,您只有 database (=schema) -> object
  • 答案是否解决了您的问题?如果是这样,习惯上将其标记为已接受,以便人们可以专注于未回答的问题。
  • 我没用过你的方法但是效果一样,现在我接受了,再次感谢!
猜你喜欢
  • 2012-01-09
  • 2020-01-18
  • 2016-08-28
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 2013-06-12
相关资源
最近更新 更多