2017-07-01 20 views
1

私はPHPコード、にpg_prepare/pg__executeで、voidを返す関数の内部で、呼び出そうとクレイジー取得しています...(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のいずれかの設定がありますか?

pg_prepare: おかげ

+0

'dungeonasdb.crea_personaggio'はあなたのテーブル名ですか? –

答えて

1

はおそらく別の何かをしたい特定の値が、プレースホルダを入れないでください。後で値にバインドします。私は常にステートメントに名前を付けることを好みます。これはdungeonasdb.crea_personaggioではないset returning function、であることを意味するものであろうからあなたがSELECT * FROM dungeonasdb.crea_personaggio(...)によってあなたの関数を呼び出すことはできません

SELECT dungeonasdb.crea_personaggio(...) 

dungeonasdb.crea_personaggiovoidを返す関数である場合

することは、あなたは、によってそれを呼び出すことができます。

だから、あなたはおそらく、あなたの文になりたい:

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

あなた秒なステートメントは placedholders($1、...)へのパラメータ、および実行を結合することpg_execute文です。

+0

私は問題を解決した、それはデータベース内の関数だった、私はテーブル名だけを使用して 'dbname.tablename'のようなすべての関数を書いた。 また、あなたの答えは正しくないと思います。PERFORMはpostgresql関数の中でしか使えないので、外部から使うことはできません。 あなたのお時間をありがとうございました:) –

+0

あなたは 'PERFORM'について正しいです。私はそれを修正しました。 PostgreSQLでは、実際には 'schema_name.function_name(...)'や 'schema_name.table_name'(あるいは一般的には' schema_name.object_name')です。同じ接続から2つのデータベースにアクセスすることはありません(FDWを除く)。 PostgreSQLには、* database - > schema - > object *があります。 MySQLでは(例えば)*データベース(=スキーマ) - >オブジェクト*のみがあります。 – joanolo

+0

はい、あなたは正しいです!ありがとう! –

関連する問題