【发布时间】:2014-02-27 04:01:06
【问题描述】:
我使用的是 PostgreSQL 9.1.11。
我需要将 SELECT 的结果返回到我的 php 脚本。 php中的调用是这样的:
$res = $pdb->getAssoc("SELECT * FROM my_profile();");
用于说明 php 中发生了什么的类代码
public function getAssoc($in_query) {
$res = pg_query($this->_Link, $in_query);
if($res == FALSE) {
return array("dberror", iconv("utf-8", "windows-1251", pg_last_error($this->_Link)));
}
return pg_fetch_all($res);
}
接下来是我在 Postgres 中的函数。当我更新任何函数时,我通过放入一个脚本来完全重新创建数据库。 (该项目处于开发的早期阶段。)我几乎没有做存储过程的经验。
我收到此错误:
structure of query does not match function result type CONTEXT: PL/pgSQL function "my_profile" line 3 at RETURN QUERY )
试着写:
CREATE FUNCTION my_profile()
RETURNS TABLE (_nick text, _email text) AS $$
BEGIN
RETURN QUERY SELECT (nick, email) FROM my_users WHERE id = 1;
END;
$$
LANGUAGE 'plpgsql' SECURITY DEFINER;
表结构为:
CREATE TABLE my_users(
id integer NOT NULL,
nick text,
email text,
pwd_salt varchar(32),
pwd_hash character(128),
CONSTRAINT users_pk PRIMARY KEY (id)
);
当我在表中返回 1 列时,查询有效。尝试在 LANGUAGE sql 而不是 plpgsql 中重写过程并取得了一些成功,但我想坚持使用 plpgsql。
我使用的 Postgres 9.1.11,php-fpm 是最新的,用于完全更新的 amd64 Debian wheezy。
我想要做的是在关联数组中返回一个包含从 proc 到 php 的 0 到 n 行的记录集。
【问题讨论】:
标签: php sql postgresql stored-procedures plpgsql