pgsql thinkphp5_thinkphp 连接postgresql

PHP连接:

php.ini中将extension=php_pgsql.dll前面的分号去掉,然后设置extension_dir指向php文件下的ext文件夹。

正常情况下这样php就可以连接postgres了,但是我的仍然出错,提示“Fatal error: Call to undefined function pg_connect()”,查看Apache的日志,“PHP Startup: Unable to load dynamic library ‘****\\PHP5\\ext\\php_pdo_pgsql.dll”。

经过查找,在Apache中conf文件夹下的配置文件httpd.conf中添加 LoadFile "***/PHP5/libpq.dll",位置在LoadModule后面即可。

(***为php安装路径)

重点来了:thinkphp 中的table_msg函数竟然找不到,需要自己手动创建:

在 PostgreSQL 里添加自定义函数 table_msg

复制以下代码到SQL管理器里执行即可:

CREATE OR REPLACE FUNCTION pgsql_type(a_type varchar) RETURNS varchar AS$BODY$DECLAREv_typevarchar;BEGIN

IF a_type=‘int8‘ THENv_type:=‘bigint‘;

ELSIF a_type=‘int4‘ THENv_type:=‘integer‘;

ELSIF a_type=‘int2‘ THENv_type:=‘smallint‘;

ELSIF a_type=‘bpchar‘ THENv_type:=‘char‘;ELSEv_type:=a_type;END IF;RETURNv_type;END;

$BODY$

LANGUAGE PLPGSQL;CREATE TYPE "public"."tablestruct" AS(

"fields_key_name"varchar(100),

"fields_name"VARCHAR(200),

"fields_type"VARCHAR(20),

"fields_length"BIGINT,

"fields_not_null"VARCHAR(10),

"fields_default"VARCHAR(500),

"fields_comment"VARCHAR(1000)

);CREATE OR REPLACE FUNCTION "public"."table_msg" (a_schema_name varchar, a_table_name varchar) RETURNS SETOF "public"."tablestruct" AS$body$DECLAREv_ret tablestruct;

v_oid oid;

v_sqlvarchar;

v_rec RECORD;

v_keyvarchar;BEGIN

SELECTpg_class.oidINTOv_oidFROMpg_classINNER JOIN pg_namespace ON (pg_class.relnamespace = pg_namespace.oid AND lower(pg_namespace.nspname) =a_schema_name)WHEREpg_class.relname=a_table_name;IF NOT FOUND THEN

RETURN;END IF;

v_sql=‘SELECT

pg_attribute.attname AS fields_name,

pg_attribute.attnum AS fields_index,

pgsql_type(pg_type.typname::varchar) AS fields_type,

pg_attribute.atttypmod-4 as fields_length,

CASE WHEN pg_attribute.attnotnull THEN‘‘not null‘‘ELSE‘‘‘‘END AS fields_not_null,

pg_attrdef.adsrc AS fields_default,

pg_description.description AS fields_comment

FROM

pg_attribute

INNER JOIN pg_class ON pg_attribute.attrelid = pg_class.oid

INNER JOIN pg_type ON pg_attribute.atttypid = pg_type.oid

LEFT OUTER JOIN pg_attrdef ON pg_attrdef.adrelid = pg_class.oid AND pg_attrdef.adnum = pg_attribute.attnum

LEFT OUTER JOIN pg_description ON pg_description.objoid = pg_class.oid AND pg_description.objsubid = pg_attribute.attnum

WHERE

pg_attribute.attnum > 0

AND attisdropped <>‘‘t‘‘AND pg_class.oid =‘ || v_oid || ‘ORDER BY pg_attribute.attnum‘;FOR v_rec IN EXECUTEv_sql LOOP

v_ret.fields_name=v_rec.fields_name;

v_ret.fields_type=v_rec.fields_type;IF v_rec.fields_length > 0 THENv_ret.fields_length:=v_rec.fields_length;ELSEv_ret.fields_length:=NULL;END IF;

v_ret.fields_not_null=v_rec.fields_not_null;

v_ret.fields_default=v_rec.fields_default;

v_ret.fields_comment=v_rec.fields_comment;SELECT constraint_name INTO v_key FROM information_schema.key_column_usage WHERE table_schema=a_schema_name AND table_name=a_table_name AND column_name=v_rec.fields_name;IF FOUND THENv_ret.fields_key_name=v_key;ELSEv_ret.fields_key_name=‘‘;END IF;RETURN NEXTv_ret;ENDLOOP;RETURN;END;

$body$

LANGUAGE‘plpgsql‘ VOLATILE CALLED ON NULLINPUT SECURITY INVOKER;

COMMENTON FUNCTION "public"."table_msg"(a_schema_name varchar, a_table_name varchar)IS ‘获得表信息‘;---重载一个函数

CREATE OR REPLACE FUNCTION "public"."table_msg" (a_table_name varchar) RETURNS SETOF "public"."tablestruct" AS$body$DECLAREv_ret tablestruct;BEGIN

FOR v_ret IN SELECT * FROM table_msg(‘public‘,a_table_name) LOOPRETURN NEXTv_ret;ENDLOOP;RETURN;END;

$body$

LANGUAGE‘plpgsql‘ VOLATILE CALLED ON NULLINPUT SECURITY INVOKER;

COMMENTON FUNCTION "public"."table_msg"(a_table_name varchar)IS ‘获得表信息‘;

修改 ThinkPHP 源代码里面的 BUG

把 ThinkPHP\Library\Think\Db\Driver\Pgsql.class.php 第 41 行 修改为:

$result = $this->query(‘select fields_name as "field",fields_type as "type",fields_not_null as "null",fields_key_name as "key",fields_default as "default",fields_default as "extra" from table_msg(\‘‘.$tableName.‘\‘);‘);

也就是在 $tableName 前后各添加一个单引号,(‘.$tableName.‘) => (\‘‘.$tableName.‘\‘)。

除了上面的问题,我还发现,M(‘table‘)->add()不能正常的返回新增记录的主键id值。

原文:http://www.cnblogs.com/blueskycc/p/5057334.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android蓝牙串口 hc06,Android手机通过蓝牙模块HC-06连接Arduino串口输出

通过手机进行通信是可以实现很多遥控功能&#xff0c;虽然距离是比较短&#xff0c;一般是10米&#xff0c;但对于我这种新手做测试&#xff0c;比起买一个几百块的多通道遥控器成本要低很多。实验目的&#xff1a;用Android实现蓝牙连接通过Arduino串口输出信息这次使用的是蓝…

esrgan_港中文-商汤联合实验室:ECCV2018 PIRM-SR 超分辨率比赛冠军:ESRGAN(已开源)...

Summary&#xff1a;中科院和京东AI研究院提出&#xff1a;改进SRN人脸检测算法&#xff0c;目前业界最强&#xff01;Author&#xff1a;AmusiDate&#xff1a;2019-02-09微信公众号&#xff1a;CVer原文链接&#xff1a;香港中文大学-商汤联合实验室&#xff1a;ECCV2018 PIR…

联通物联卡为什么没有网络_联通物联卡的资费和优势怎样

近年来&#xff0c;物联网的发展如火如荼&#xff0c;许多物联网卡应用不断兴起&#xff0c;中国移动、中国电信、中国联通都加入了物联网这一事件&#xff0c;中国联通物联网卡和腾讯将联网网卡升级为TUSISIM网卡&#xff0c;这种新的联通TUSI物联网卡也可以理解为一种新的身份…

android中如何新建一个activity,《Android Activity》活动的介绍和创建

Activity 是什么Android 有四大组件&#xff1a;Activity、Service、Broadcast Receiver 和 Content Provider。Activity&#xff0c;活动&#xff0c;即用来承载用户界面的容器&#xff0c;Android 四大组件之一。我们在 APP 里面看到的页面就需要一个 Activity&#xff0c;页…

ffmpeg 音乐循环_[宜配屋]听图阁

ffmpeg -i out3.mp4 -i music3D.wav -filter_complex [1:a]alooploop-1:size2e09[out];[out][0:a]amix -ss 0 -t 60 -y out.mp4参数详细介绍&#xff1a;ffmpeg//输入视频&#xff0c;最好选一个大于一分钟的尝试-i out3.mp4//输入背景音&#xff0c;最好短一点&#xff0c;方便…

android qq红点,Android高仿QQ小红点功能

先给大家展示下效果图&#xff1a;绘制贝塞尔曲线&#xff1a;主要是当在一定范围内拖拽时算出固定圆和拖拽圆的外切直线以及对应的切点&#xff0c;就可以通过path.quadTo()来绘制二阶贝塞尔曲线了~整体思路&#xff1a;1、当小红点静止时&#xff0c;什么都不做&#xff0c;只…

modern android5.1,Modern摩登印

Modern摩登印可以帮助小伙伴们轻松制作手机相册&#xff0c;超多素材为你提供&#xff0c;支持个性化设置&#xff0c;将照片一秒变高大上的海报&#xff0c;还能支持音乐相册效果&#xff0c;超多原创音乐随你挑选&#xff0c;结合潮流相册模板&#xff0c;让你的作品更精美哦…

android1.6,令人遗憾的Android 1.6系统_戴尔 Mini5(Streak)_手机其它OS-中关村在线

令人遗憾的Android 1.6系统虽然Dell Streak上周五刚刚在美国地区上市&#xff0c;但实际上这款产品的开发时间已经很长了。早在去年Dell的Mini 3i上市之前这款被称之为Dell Mini 5的产品就已经出现在大家的视野之中&#xff0c;而当时其搭载的就是在当时看来还是十分先进的Andr…

java第七章jdbc课后简答题_javaEE简答题答案

一、简答题(30分&#xff0c;6题*5分)(一)第一章概述1.三层体系结构的优点有哪些&#xff1f;p2(1)安全性高(2)易维护(3)快速响应(4)系统扩展灵活2.两层体系结构的缺点有哪些&#xff1f;p2-3(1)安全性低(2)部署困难(3)消耗系统资源3.简述Java EE的“组件-容器”编程思想。(P5&…

jupyter配置到服务器_服务器端jupyter notebook映射到本地浏览器的操作

&#xff11;、远程服务器上安装jupyter notebook(配置jupyter_notebook_config.py文件)sudo pip install jupyter&#xff12;、远程服务器(8890端口,没有下面括号中内容默认在服务器8888端口打开jupyter notebook&#xff0c;下面将使用默认端口8888)启动jupyter notebookjup…

android 控制word,Android使用POI进行Word操作(一)

操作步骤步骤一&#xff1a;引用相关POI库步骤二&#xff1a;创建POI中的word文件对象步骤三&#xff1a;调用word文件对象的方法对文件进行操作步骤一&#xff1a;引用相关的POI库吐槽一下&#xff0c;这一步是最坑的本人尝试了很多版本组合&#xff0c;最新的版本提示class重…

go编译so win10_windows搭建Go语言交叉编译环境

我的环境&#xff1a;64位 windows 10go version go1.9.1 windows/amd641. 安装MinGW-w64我的系统是64位win10&#xff0c;早期版本的MinGW我安装后编译go的相关工具会一路报错&#xff0c;换成mingw-w64就可以顺利编译&#xff0c;下载地址&#xff1a;http://sourceforge.net…

android car bt模块,大谷蓝牙小车BT Car/Android Car手机控制 重力控制小车 安卓操控小车...

产品介绍&#xff1a;Android蓝牙遥控小车平台。是通过Android手机以蓝牙方式操控小车前进后退左转右转等&#xff0c;具有重力感应操控、触摸屏虚拟操控、虚拟摇杆三种控制模式。并且还具有呼吸灯、电源指示灯、蓝牙连接指示灯、速度等级指示灯等状态指示。小车自带锂电池及US…

html语言怎么设计出来的,(正式)网页设计语言HTML.ppt

(正式)网页设计语言HTML第二章网页设计语言HTML HTML基础知识 页面基本信息和布局 文本修饰 超文本链接 表格 图像 表单 多媒体 什么是HTML&#xff1f; HTML是Hyper Text Markup Language的英文缩写&#xff0c;翻译为“超文本标识语言”。它是一种用来制作超文本文档的简单标…

Dijkstra(迪杰斯特拉)算法总结

知识概览 Dijkstra算法适用于解决所有边权都是正数的最短路问题。Dijkstra算法分为朴素的Dijkstra算法和堆优化版的Dijkstra算法。朴素的Dijkstra算法时间复杂度为&#xff0c;适用于稠密图。堆优化版的Dijkstra算法时间复杂度为&#xff0c;适用于稀疏图。稠密图的边数m和是一…

二元二次方程例题_二元二次方程组-解法-例题

对“二一”型二元二次方程组中形如的方程组&#xff0c;可以根据一元二次方程根与系数的关系&#xff0c;把x、y看做一元二次方程z2-azb0的两个根&#xff0c;解这个方程&#xff0c;求得的z1和z2的值&#xff0c;就是x、y的值。当x1z1时&#xff0c;y1z2&#xff1b;当x2z2时&…

wxwidget编译安装_wxWidgets的安装编译、相关配置、问题分析处理

一、介绍部分 (win7 下的 GUI 效果图见 本篇文章的最后部分截图2张)wxWidgets是一个开源的跨平台的C构架库(framework)&#xff0c;它可以提供GUI(图形用户界面)和其它工具。目前的2.x版本支持所有版本的Windows、带GTK或Motif的Unix和MacOS。相当于大家熟悉的 VC。二、wxWidge…

馀承东发布鸿蒙,鸿蒙系统一无是处?鸿蒙有何优势?

华为方面官宣&#xff0c;将于6月2日晚8点&#xff0c;举行鸿蒙操作系统及华为全场景新品发布会&#xff0c;届时&#xff0c;大家期待已久的鸿蒙操作系统也将正式亮相。鸿蒙OS有别于传统OS&#xff0c;具有四大技术特性&#xff0c;这也是鸿蒙的四大优越之处。首先&#xff0c…

html 鼠标图标做成动画效果,怎么实现鼠标经过图标动画效果

学习前端的小伙伴们你知道鼠标经过图标动画效果如何实现吗?不知道的话跟着小编一起来学习标经过图标动画效果怎么实现把。今天就为大家分享一组时尚而简单的鼠标经过图标动画效果。构建HTML基本结构在本示例当中用到的HTML结构极其简单&#xff0c;在一个大的div容器中放了几个…

netty心跳过程中 发送消息失败_Netty 4.0 实现心跳检测和断线重连

arg0.pipeline().addLast("ping", new IdleStateHandler(25, 15, 10,TimeUnit.SECONDS));这个处理器&#xff0c;它的作用就是用来检测客户端的读取超时的&#xff0c;该类的第一个参数是指定读操作空闲秒数&#xff0c;第二个参数是指定写操作的空闲秒数&#xff0c…