2017-07-01 27 views
1

我越来越疯狂试图调用,PHP代码中,返回void,与pg_prepare/pg__execute,我做错了一个功能...(PHP/Postgresql)调用一个返回void的函数?

$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? 感谢

+0

'dungeonasdb.crea_personaggio'是你的表名吗? –

回答

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'); 

你的第二个statment是pg_execute声明结合参数的placedholders($1,...),并执行。

+0

好的我解决了这个问题,它是数据库中的函数,我使用只有表名称而不是像'dbname.tablename'来编写所有函数。 另外我认为你的答案是不正确的,因为PERFORM只能在postgresql函数中使用,所以你不能从外部使用它。 但是,谢谢你的时间:) –

+0

你说得对'PERFORM'。我纠正了它。在PostgreSQL中,你实际写的是'schema_name.function_name(...)'或'schema_name.table_name'(或者通常'schema_name.object_name')。您不能从同一个连接访问两个数据库(通过FDW除外)。在PostgreSQL中你有* database - > schema - > object *。在MySQL中(例如),你只有* database(= schema) - > object *。 – joanolo

+0

是的,你是对的!谢谢! –