首页 » SEO优化 » execphp返回id技巧_Go mysql数据库操作

execphp返回id技巧_Go mysql数据库操作

访客 2024-10-24 0

扫一扫用手机浏览

文章目录 [+]

Go官方并不供应数据库驱动,而只是为开拓数据库驱动定义了一些标准接口。
我们要利用mysql数据库得利用第三方掩护的mysql驱动。
Go中支持MySQL的驱动目前比较多,有如下几种,有些是支持database/sql标准,而有些是采取了自己的实现接口,常用的有如下几种:

https://github.com/go-sql-driver/mysql 支持database/sql,全部采取go写。

execphp返回id技巧_Go mysql数据库操作

https://github.com/ziutek/mymysql 支持database/sql,也支持自定义的接口,全部采取go写。

execphp返回id技巧_Go mysql数据库操作
(图片来自网络侵删)

https://github.com/Philio/GoMySQL 不支持database/sql,自定义接口,全部采取go写。

也推举利用第一个,紧张情由:

掩护的比较好

完备支持database/sql接口

支持keepalive,保持长连接

有了驱动,实在golang利用mysql和其他措辞没有太大的差异,虽然详细的方法调用与类组织不太一样。

准备

利用mariadb数据库,新建一个golang的数据库,添加两张测试用的表。

create database golang;use golang;CREATE TABLE `userinfo` (`uid` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(64) DEFAULT NULL,PRIMARY KEY (`uid`)) ENGINE = InnoDB DEFAULT CHARSET = latin1;CREATE TABLE `userdetail` (`uid` int(11) NOT NULL DEFAULT '0',`intro` varchar(128) DEFAULT NULL,`profile` text) ENGINE = InnoDB DEFAULT CHARSET = latin1;

先ssh登录做事器(由于安全考虑,不开放mysql的root用户的远程登录权限),用root用户本地登录mysql新建一个用于测试的可远程登录的用户:

ssh wuxu@10.4.16.95mysql -uroot -p// enter root passwordcreate user golang@'%' identified by 'golangMysql';grant privileges on .golang to golang@'%';flush privileges;

这样就可以用golang登录新建的数据库了

Golang操作mysql

先get数据库驱动,在命令走运行go get github.com/go-sql-driver/mysql,会自动利用git从github下载mysql驱动工程到$GOPATH/src/

基本的插入,更新,删除,查找方法如下:

package mainimport (_ \公众github.com/go-sql-driver/mysql\公众 \公众database/sql\"大众 \公众fmt\"大众)func main() {// mysql是一个注册过的数据库驱动了,在驱动的init函数中注册db, err := sql.Open(\公众mysql\"大众, \"大众golang:golangMysql@tcp(10.4.16.95:3306)/golang?charset=utf8\公众)CheckErr(err)fmt.Println(\"大众connected\公众)stmt, err := db.Prepare(\公众insert userinfo set username=?\公众)CheckErr(err)// fmt.Println(stmt)res, err := stmt.Exec(\"大众wuxu\"大众) // 利用占位符'?'防止sql注入,这是一个不定参数函数,传入的参数与prepare阶段设置的占位符相等CheckErr(err)id, err := res.LastInsertId()CheckErr(err)fmt.Println(id)stmt, _ = db.Prepare(\公众update userinfo set username=? where username=?\公众)res, err = stmt.Exec(\"大众wuxu01\"大众, \"大众wuxu\"大众)aff, err := res.RowsAffected()CheckErr(err)fmt.Println(aff)rows, err := db.Query(\"大众select from userinfo\"大众)for rows.Next() {var id intvar usename stringerr = rows.Scan(&id, &usename)CheckErr(err)fmt.Println(id, usename)}stmt, _ = db.Prepare(\"大众delete from userinfo where uid>?\"大众)res, _ = stmt.Exec(4)aff, _ = res.RowsAffected()fmt.Println(\公众affected\公众, aff)}func CheckErr(e error) {if e != nil {panic(e)}}

与以往的mysql操作相似,也是一个连接工具,对付插入,删除等要先prepare,然后实行Exec,在exec阶段绑定占位符变量。

比较独特的是Exec返回的Result指针,它包含LastInsertId和 RowsAffedted 两个方法。

把稳数据连接的dsn(data source name)和php或者其他措辞的比较不一样。
我们利用的是 user:password@protocol(host:port)/dbname?charset=utf8 的形式。
驱动本身支持更多形式的dsn:

user@unix(/path/to/socket)/dbname?charset=utf8

user:password@tcp(localhost:5555)/dbname?charset=utf8

user:password@/dbname

user:password@tcp([::]:80)/dbname // ipv6

全体数据库操作的流程大概如下:

sql.Open()函数用来打开一个注册过的数据库驱动

db.Prepare()函数用来返回准备要实行的sql操作, 然后返回准备完毕的实行状态。

db.Query()函数用来直接实行Sql返回Rows结果。

stmt.Exec()函数用来实行stmt准备好的SQL语句。

数据库驱动的注册在数据库驱动包导入时实行,注册的逻辑写在包的init函数中。
导入驱动包只须要 import _ \公众driver/package\公众,由于只须要实行其init(),而不须要调用包中导出的方法,调用的是go措辞规定的sql接口。

标签:

相关文章

我国土地利用分类代码的构建与应用

土地利用分类代码是我国土地管理的重要组成部分,是土地资源调查、规划、利用和保护的依据。土地利用分类代码的构建与应用显得尤为重要。本...

SEO优化 2025-02-18 阅读1 评论0

微信跳转微信支付便捷支付体验的秘密武器

移动支付已成为人们日常生活中不可或缺的一部分。作为我国领先的社交平台,微信支付凭借其便捷、安全的支付方式,深受广大用户的喜爱。而微...

SEO优化 2025-02-18 阅读0 评论0

探寻会计科目代码背后的奥秘分类与

会计科目代码是会计信息系统中不可或缺的组成部分,它将企业的经济活动进行分类和归纳,为会计核算、财务分析和决策提供重要依据。本文将从...

SEO优化 2025-02-18 阅读1 评论0