5、PHP程序开发
5.1、连接数据库
<?php
$host="172.16.0.29";
$port="15432";
$dbname="postgres";
$user="tbase" ;
$password="";
//连接数据库
$conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
if (!$conn){
$error_msg=@pg_errormessage($conn);
echo "连接数据库出错,详情:".$error_msg."\n<BR>"; ;
exit;
}else{
echo "连接数据库成功"."\n<BR>";
}
//关闭连接
pg_close($conn);
?>
执行
[root@VM_0_47_centos test]
连接数据库成功
5.2、创建数据表
<?php
$host="172.16.0.29";
$port="15432";
$dbname="postgres";
$user="tbase" ;
$password="";
//连接数据库
$conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
if (!$conn){
$error_msg=@pg_errormessage($conn);
echo "连接数据库出错,详情:".$error_msg."\n"; ;
exit;
}else{
echo "连接数据库成功"."\n";
}
//建立数据表
$sql="create table public.tbase(id integer,nickname varchar(100)) distribute by shard(id) to group default_group;";
$result = @pg_exec($conn,$sql) ;
if (!$result){
$error_msg=@pg_errormessage($conn);
echo "创建数据表出错,详情:".$error_msg."\n"; ;
exit;
}else{
echo "创建数据表成功"."\n";
}
//关闭连接
pg_close($conn);
?>
执行
[root@VM_0_47_centos test]# curl http://127.0.0.1:8080/dbsta/test/createtable.php
连接数据库成功
创建数据表成功
5.3、插入数据
<?php
$host="172.16.0.29";
$port="15432";
$dbname="postgres";
$user="tbase" ;
$password="";
//连接数据库
$conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
if (!$conn){
$error_msg=@pg_errormessage($conn);
echo "连接数据库出错,详情:".$error_msg."\n"; ;
exit;
}else{
echo "连接数据库成功"."\n";
}
//插入数据
$sql="insert into public.tbase values(1,'tbase'),(2,'pgxz');";
$result = @pg_exec($conn,$sql) ;
if (!$result){
$error_msg=@pg_errormessage($conn);
echo "插入数据出错,详情:".$error_msg."\n";
exit;
}else{
echo "插入数据成功"."\n";
}
//关闭连接
pg_close($conn);
?>
执行
[tbase@VM_0_47_centos test]$ curl http://127.0.0.1:8080/dbsta/test/insert.php
连接数据库成功
插入数据成功
<?php
$host="172.16.0.29";
$port="15432";
$dbname="postgres";
$user="tbase" ;
$password="";
//连接数据库
$conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
if (!$conn){
$error_msg=@pg_errormessage($conn);
echo "连接数据库出错,详情:".$error_msg."\n"; ;
exit;
}else{
echo "连接数据库成功"."\n";
}
//查询数据
$sql="select id,nickname from public.tbase";
$result = @pg_exec($conn,$sql) ;
if (!$result){
$error_msg=@pg_errormessage($conn);
echo "查询数据出错,详情:".$error_msg."\n";
exit;
}else{
echo "插入数据成功"."\n";
}
$record_num = pg_numrows($result);
echo "返回记录数".$record_num."\n";
$rec=pg_fetch_all($result);
for($i=0;$i<$record_num;$i++){
echo "记录数#".strval($i+1)."\n";
echo "id:".$rec[$i]["id"]."\n";
echo "nickname:".$rec[$i]["nickname"]."\n\n";
}
//关闭连接
pg_close($conn);
?>
调用方法
[root@VM_0_47_centos ~]# curl http://127.0.0.1:8080/dbsta/test/select.php
连接数据库成功
插入数据成功
返回记录数2
记录数#1
id:1
nickname:tbase
记录数#2
id:2
nickname:pgxz
5.5、流数据copy 入表
<?php
$host="172.16.0.29";
$port="15432";
$dbname="postgres";
$user="tbase" ;
$password="";
//连接数据库
$conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
if (!$conn){
$error_msg=@pg_errormessage($conn);
echo "连接数据库出错,详情:".$error_msg."\n"; ;
exit;
}else{
echo "连接数据库成功"."\n";
}
$row=ARRAY("1,TBase","2,pgxz");
$flag=pg_copy_from($conn,"public.tbase",$row,",");
if (!$flag){
$error_msg=@pg_errormessage($conn);
echo "copy出错,详情:".$error_msg."\n";
}else{
echo "copy成功"."\n";
}
//关闭连接
pg_close($conn);
?>
调用方法
curl http://127.0.0.1/dbsta/cron/php_copy_from.php
连接数据库成功
copy成功
<?php
$host="172.16.0.29";
$port="15432";
$dbname="postgres";
$user="tbase" ;
$password="";
//连接数据库
$conn=@pg_connect("host=$host port=$port dbname=$dbname user=$user password=$password");
if (!$conn){
$error_msg=@pg_errormessage($conn);
echo "连接数据库出错,详情:".$error_msg."\n"; ;
exit;
}else{
echo "连接数据库成功"."\n";
}
$row=pg_copy_to($conn,"public.tbase",",");
if (!$row){
$error_msg=@pg_errormessage($conn);
echo "copy出错,详情:".$error_msg."\n";
}else{
print_r($row);
}
//关闭连接
pg_close($conn);
?>
调用方法
curl http://127.0.0.1/dbsta/cron/php_copy_to.php
连接数据库成功
Array
(
[0] => 1,TBase
[1] => 2,pgxz
6、golang程序开发
6.1、连接数据库
package main
import (
"fmt"
"time"
"github.com/jackc/pgx"
)
func main() {
var error_msg string
//连接数据库
conn, err := db_connect()
if err != nil {
error_msg = "连接数据库失败,详情:" + err.Error()
write_log("Error", error_msg)
return
}
//程序运行结束时关闭连接
defer conn.Close()
write_log("Log", "连接数据库成功")
}
/*
功能描述:写入日志处理
参数说明:
log_level -- 日志级别,只能是是Error或Log
error_msg -- 日志内容
返回值说明:无
*/
func write_log(log_level string, error_msg string) {
//打印错误信息
fmt.Println("访问时间:", time.Now().Format("2006-01-02 15:04:05"))
fmt.Println("日志级别:", log_level)
fmt.Println("详细信息:", error_msg)
}
/*
功能描述:连接数据库
参数说明:无
返回值说明:
conn *pgx.Conn -- 连接信息
err error --错误信息
*/
func db_connect() (conn *pgx.Conn, err error) {
var config pgx.ConnConfig
config.Host = "127.0.0.1" //数据库主机host或ip
config.User = "tbase" //连接用户
config.Password = "pgsql" //用户密码
config.Database = "postgres" //连接数据库名
config.Port = 15432 //端口号
conn, err = pgx.Connect(config)
return conn, err
}
[root@VM_0_29_centos tbase]# go run conn.go
访问时间:2018-04-03 20:40:28
日志级别:Log
详细信息:连接数据库成功
编译后运行
[root@VM_0_29_centos tbase]# go build conn.go
[root@VM_0_29_centos tbase]# ./conn
访问时间:2018-04-03 20:40:48
日志级别:Log
详细信息:连接数据库成功
package main
import (
"fmt"
"time"
"github.com/jackc/pgx"
)
func main() {
var error_msg string
var sql string
//连接数据库
conn, err := db_connect()
if err != nil {
error_msg = "连接数据库失败,详情:" + err.Error()
write_log("Error", error_msg)
return
}
//程序运行结束时关闭连接
defer conn.Close()
write_log("Log", "连接数据库成功")
//建立数据表
sql = "create table public.tbase(id varchar(20),nickname varchar(100)) distribute by shard(id) to group default_group;"
_, err = conn.Exec(sql)
if err != nil {
error_msg = "创建数据表失败,详情:" + err.Error()
write_log("Error", error_msg)
return
} else {
write_log("Log", "创建数据表成功")
}
}
/*
功能描述:写入日志处理
参数说明:
log_level -- 日志级别,只能是是Error或Log
error_msg -- 日志内容
返回值说明:无
*/
func write_log(log_level string, error_msg string) {
//打印错误信息
fmt.Println("访问时间:", time.Now().Format("2006-01-02 15:04:05"))
fmt.Println("日志级别:", log_level)
fmt.Println("详细信息:", error_msg)
}
/*
功能描述:连接数据库
参数说明:无
返回值说明:
conn *pgx.Conn -- 连接信息
err error --错误信息
*/
func db_connect() (conn *pgx.Conn, err error) {
var config pgx.ConnConfig
config.Host = "127.0.0.1" //数据库主机host或ip
config.User = "tbase" //连接用户
config.Password = "pgsql" //用户密码
config.Database = "postgres" //连接数据库名
config.Port = 15432 //端口号
conn, err = pgx.Connect(config)
return conn, err
}
[root@VM_0_29_centos tbase]# go run createtable.go
访问时间:2018-04-03 20:50:24
日志级别:Log
详细信息:连接数据库成功
访问时间:2018-04-03 20:50:24
日志级别:Log
详细信息:创建数据表成功
6.3、插入数据
package main
import (
"fmt"
"strings"
"time"
"github.com/jackc/pgx"
)
func main() {
var error_msg string
var sql string
var nickname string
//连接数据库
conn, err := db_connect()
if err != nil {
error_msg = "连接数据库失败,详情:" + err.Error()
write_log("Error", error_msg)
return
}
//程序运行结束时关闭连接
defer conn.Close()
write_log("Log", "连接数据库成功")
//插入数据
sql = "insert into public.tbase values('1','tbase'),('2','pgxz');"
_, err = conn.Exec(sql)
if err != nil {
error_msg = "插入数据失败,详情:" + err.Error()
write_log("Error", error_msg)
return
} else {
write_log("Log", "插入数据成功")
}
//绑定变量插入数据,不需要做防注入处理
sql = "insert into public.tbase values($1,$2),($1,$3);"
_, err = conn.Exec(sql, "3", "postgresql", "postgres")
if err != nil {
error_msg = "插入数据失败,详情:" + err.Error()
write_log("Error", error_msg)
return
} else {
write_log("Log", "插入数据成功")
}
//拼接sql语句插入数据,需要做防注入处理
nickname = "TBase is ' good!"
sql = "insert into public.tbase values('1','" + sql_data_encode(nickname) + "')"
_, err = conn.Exec(sql)
if err != nil {
error_msg = "插入数据失败,详情:" + err.Error()
write_log("Error", error_msg)
return
} else {
write_log("Log", "插入数据成功")
}
}
/*
功能描述:sql查询拼接字符串编码
参数说明:
str -- 要编码的字符串
返回值说明:
返回编码过的字符串
*/
func sql_data_encode(str string) string {
return strings.Replace(str, "'", "''", -1)
}
/*
功能描述:写入日志处理
参数说明:
log_level -- 日志级别,只能是是Error或Log
error_msg -- 日志内容
返回值说明:无
*/
func write_log(log_level string, error_msg string) {
//打印错误信息
fmt.Println("访问时间:", time.Now().Format("2006-01-02 15:04:05"))
fmt.Println("日志级别:", log_level)
fmt.Println("详细信息:", error_msg)
}
/*
功能描述:连接数据库
参数说明:无
返回值说明:
conn *pgx.Conn -- 连接信息
err error --错误信息
*/
func db_connect() (conn *pgx.Conn, err error) {
var config pgx.ConnConfig
config.Host = "127.0.0.1" //数据库主机host或ip
config.User = "tbase" //连接用户
config.Password = "pgsql" //用户密码
config.Database = "postgres" //连接数据库名
config.Port = 15432 //端口号
conn, err = pgx.Connect(config)
return conn, err
}
[root@VM_0_29_centos tbase]# go run insert.go
访问时间:2018-04-03 21:05:51
日志级别:Log
详细信息:连接数据库成功
访问时间:2018-04-03 21:05:51
日志级别:Log
详细信息:插入数据成功
访问时间:2018-04-03 21:05:51
日志级别:Log
详细信息:插入数据成功
访问时间:2018-04-03 21:05:51
日志级别:Log
详细信息:插入数据成功
6.4、查询数据
package main
import (
"fmt"
"strings"
"time"
"github.com/jackc/pgx"
)
func main() {
var error_msg string
var sql string
//连接数据库
conn, err := db_connect()
if err != nil {
error_msg = "连接数据库失败,详情:" + err.Error()
write_log("Error", error_msg)
return
}
//程序运行结束时关闭连接
defer conn.Close()
write_log("Log", "连接数据库成功")
sql = "SELECT id,nickname FROM public.tbase LIMIT 2"
rows, err := conn.Query(sql)
if err != nil {
error_msg = "查询数据失败,详情:" + err.Error()
write_log("Error", error_msg)
return
} else {
write_log("Log", "查询数据成功")
}
var nickname string
var id string
for rows.Next() {
err = rows.Scan(&id, &nickname)
if err != nil {
error_msg = "执行查询失败,详情:" + err.Error()
write_log("Error", error_msg)
return
}
error_msg = fmt.Sprintf("id:%s nickname:%s", id, nickname)
write_log("Log", error_msg)
}
rows.Close()
nickname = "tbase"
sql = "SELECT id,nickname FROM public.tbase WHERE nickname ='" + sql_data_encode(nickname) + "' "
rows, err = conn.Query(sql)
if err != nil {
error_msg = "查询数据失败,详情:" + err.Error()
write_log("Error", error_msg)
return
} else {
write_log("Log", "查询数据成功")
}
defer rows.Close()
for rows.Next() {
err = rows.Scan(&id, &nickname)
if err != nil {
error_msg = "执行查询失败,详情:" + err.Error()
write_log("Error", error_msg)
return
}
error_msg = fmt.Sprintf("id:%s nickname:%s", id, nickname)
write_log("Log", error_msg)
}
}
/*
功能描述:sql查询拼接字符串编码
参数说明:
str -- 要编码的字符串
返回值说明:
返回编码过的字符串
*/
func sql_data_encode(str string) string {
return strings.Replace(str, "'", "''", -1)
}
/*
功能描述:写入日志处理
参数说明:
log_level -- 日志级别,只能是是Error或Log
error_msg -- 日志内容
返回值说明:无
*/
func write_log(log_level string, error_msg string) {
//打印错误信息
fmt.Println("访问时间:", time.Now().Format("2006-01-02 15:04:05"))
fmt.Println("日志级别:", log_level)
fmt.Println("详细信息:", error_msg)
}
/*
功能描述:连接数据库
参数说明:无
返回值说明:
conn *pgx.Conn -- 连接信息
err error --错误信息
*/
func db_connect() (conn *pgx.Conn, err error) {
var config pgx.ConnConfig
config.Host = "127.0.0.1" //数据库主机host或ip
config.User = "tbase" //连接用户
config.Password = "pgsql" //用户密码
config.Database = "postgres" //连接数据库名
config.Port = 15432 //端口号
conn, err = pgx.Connect(config)
return conn, err
}
[root@VM_0_29_centos tbase]# go run select.go
访问时间:2018-04-09 10:35:50
日志级别:Log
详细信息:连接数据库成功
访问时间:2018-04-09 10:35:50
日志级别:Log
详细信息:查询数据成功
访问时间:2018-04-09 10:35:50
日志级别:Log
详细信息:id:2 nickname:tbase
访问时间:2018-04-09 10:35:50
日志级别:Log
详细信息:id:3 nickname:postgresql
访问时间:2018-04-09 10:35:50
日志级别:Log
详细信息:查询数据成功
访问时间:2018-04-09 10:35:50
日志级别:Log
详细信息:id:1 nickname:tbase
6.5、流数据copy from入表
package main
import (
"fmt"
"math/rand"
"time"
"github.com/jackc/pgx"
)
func main() {
var error_msg string
//连接数据库
conn, err := db_connect()
if err != nil {
error_msg = "连接数据库失败,详情:" + err.Error()
write_log("Error", error_msg)
return
}
//程序运行结束时关闭连接
defer conn.Close()
write_log("Log", "连接数据库成功")
//构造5000行数据
inputRows := [][]interface{}{}
var id string
var nickname string
for i := 0; i < 5000; i++ {
id = fmt.Sprintf("%d", rand.Intn(10000))
nickname = fmt.Sprintf("%d", rand.Intn(10000))
inputRows = append(inputRows, []interface{}{id, nickname})
}
copyCount, err := conn.CopyFrom(pgx.Identifier{"tbase"}, []string{"id", "nickname"}, pgx.CopyFromRows(inputRows))
if err != nil {
error_msg = "执行copyFrom失败,详情:" + err.Error()
write_log("Error", error_msg)
return
}
if copyCount != len(inputRows) {
error_msg = fmt.Sprintf("执行copyFrom失败,copy行数:%d 返回行数为:%d", len(inputRows), copyCount)
write_log("Error", error_msg)
return
} else {
error_msg = "Copy 记录成功"
write_log("Log", error_msg)
}
}
/*
功能描述:写入日志处理
参数说明:
log_level -- 日志级别,只能是是Error或Log
error_msg -- 日志内容
返回值说明:无
*/
func write_log(log_level string, error_msg string) {
//打印错误信息
fmt.Println("访问时间:", time.Now().Format("2006-01-02 15:04:05"))
fmt.Println("日志级别:", log_level)
fmt.Println("详细信息:", error_msg)
}
/*
功能描述:连接数据库
参数说明:无
返回值说明:
conn *pgx.Conn -- 连接信息
err error --错误信息
*/
func db_connect() (conn *pgx.Conn, err error) {
var config pgx.ConnConfig
config.Host = "127.0.0.1" //数据库主机host或ip
config.User = "tbase" //连接用户
config.Password = "pgsql" //用户密码
config.Database = "postgres" //连接数据库名
config.Port = 15432 //端口号
conn, err = pgx.Connect(config)
return conn, err
}
[root@VM_0_29_centos tbase]# go run copy_from.go
访问时间:2018-04-09 10:36:40
日志级别:Log
详细信息:连接数据库成功
访问时间:2018-04-09 10:36:40
日志级别:Log
详细信息:Copy 记录成功
6.6、golang相关资源包
https://github.com/jackc/pgxhttps://github.com/pkg/errors