PHP连接并使用人大金仓数据库kingbase

tech2023-01-18  118

安装人大金仓

注意事项

设置不区分大小写

创建数据库

创建DEMO数据库后,默认也会自动创建PUBLIC模式,后续的新建表等操作会自动在PUBLIC模式中进行。

配置PHP(PDO接口)

下载接口文件

pdo_kdb_x64_for_php7.2.26.zip

注:该接口文件只适合于PHP7.2 TS X64版本,如果你使用的是其他版本的PHP,需要去人大金仓官网下载。

拷贝文件

将php_pdo_kdb.dll文件拷贝至php的扩展目录下(扩展目录通过查看phpinfo里面的extension_dir值)

然后在php.ini的末尾添加一行:

extension=php_pdo_kdb.dll

打开命令行,输入php -m,如果提示:

PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_kdb' (tried: xxxx/ext\pdo_kdb (找不到指定的模块。)

则需要把数据库安装目录下的D:\soft\Kingbase\ES\V8\Server\bin中的dll文件和D:\soft\Kingbase\ES\V8\jre\bin中的dll文件都拷贝至C:\Windows\System32目录下。

重启服务器,查看phpinfo,如果显示以下信息,则说明安装成功:

连接数据库

$dm_conf = array( 'host'=> '127.0.0.1', 'port'=> '54321', 'db'=> 'DEMO', 'db_user' => 'SYSTEM', 'db_pwd'=> 'SYSTEM', ); $pdo = new PDO("kdb:host=".$dm_conf['host'].";port=".$dm_conf['port'].";dbname=".$dm_conf['db']."",$dm_conf['db_user'],$dm_conf['db_pwd']);

创建表

$sql = 'create table "users" ( "id" SERIAL primary key, "user_name" VARCHAR(20), "created_at" TIMESTAMP, "updated_at" TIMESTAMP DEFAULT now()::timestamp(0) )'; $result = $pdo->exec($sql);

注:smallserial、serial和bigserial不是真正的字段类型,它们只是为了创建唯一标识符列而存在的方便符号(类似MySQL数据库中支持的AUTO_INCREMENT属性)。 例如以下建表语句:

CREATE TABLE tablename ( id SERIAL );

等价于

CREATE SEQUENCE tablename_id_SEQ; CREATE TABLE tablename ( id integer NOT NULL DEFAULT nextval('tablename_id_SEQ') ); ALTER SEQUENCE tablename_id_SEQ OWNED BY tablename.id;

插入数据

$sql = "insert into users (user_name,created_at,updated_at) values ('张三','2020-09-03 10:06:00','".date('Y-m-d H:i:s')."')"; $result = $pdo->exec($sql);

查询数据

$sql = "select * from users;"; $stmt = $pdo->prepare($sql); if($stmt===false){ var_dump($pdo->errorInfo());die; } $rs = $stmt->execute(); if ($rs) { while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { var_dump($row); } }

更新数据

$sql = "update users set user_name = '李四' where id = 1"; $result = $pdo->exec($sql);

删除数据

$sql = "delete from users where id = 1"; $result = $pdo->exec($sql);

设置默认模式

通常情况下,在sql语句中的表名前需要指定模式名。例如上面例子中的users等价于public.users(因为public是默认模式),其中public就是模式名,users是表名。 可以通过SET search_path TO 模式名来更改当前模式。设置后,就会默认去设置的模式中找表。

查看当前模式 SHOW search_path;

其他

查询某个库下的所有表 SELECT * FROM sys_tables; 查询当前时间 select now();

SELECT CURRENT_TIMESTAMP

如果只需要年月日时分秒:

SELECT now()::timestamp(0) 查询表空间 select * from sys_tablespace; 查看表空间大小 select sys_size_pretty(sys_tablespace_size('SYS_DEFAULT')); 查询表的字段信息 SELECT a.attname, sys_catalog.format_type(a.atttypid, a.atttypmod), a.attnum, sys_catalog.col_description(a.attrelid, a.attnum) FROM sys_catalog.sys_attribute a WHERE a.attnum > 0 AND NOT a.attisdropped and a.attrelid = 'test.users'::regclass::oid ORDER BY a.attnum;

注:test.users为表名。

获取最后插入的自增ID的值 select currval('users_id_SEQ');

select lastval()

注:需要先执行插入语句,然后再执行该语句。users_id_SEQ为序列名。

最新回复(0)