mysql pdo教程_php中mysql连接方式PDO使用详解

本文主要详细介绍了PHP中mysql的连接方式PDO的各种使用方法,算是个人的一个小结,如有遗漏还请告之,有需要的小伙伴来参考下吧。

PDO常用方法:

PDO::query()主要用于有记录结果返回的操作(PDOStatement),特别是select操作。

PDO::exec()主要是针对没有结果集合返回的操作。如insert,update等操作。返回影响行数。

PDO::lastInsertId()返回上次插入操作最后一条ID,但要注意:如果用insert into tb(col1,col2) values(v1,v2),(v11,v22)..的方式一次插入多条记录,lastinsertid()返回的只是第一条(v1,v2)插入时的ID,而不是最后一条记录插入的记录ID。

PDOStatement::fetch()是用来获取一条记录。配合while来遍历。

PDOStatement::fetchAll()是获取所有记录集到一个中。

PDOStatement::fetchcolumn([int column_indexnum])用于直接访问列,参数column_indexnum是该列在行中的从0开始索引值,但是,这个方法一次只能取得同一行的一列,只要执行一次,就跳到下一行。因此,用于直接访问某一列时较好用,但要遍历多列就用不上。

PDOStatement::rowcount()适用于当用query("select ...")方法时,获取记录的条数。也可以用于预处理中。$stmt->rowcount();

PDOStatement::columncount()适用于当用query("select ...")方法时,获取记录的列数。

注解:

1、选fetch还是fetchall?

小记录集时,用fetchall效率高,减少从数据库检索次数,但对于大结果集,用fetchall则给系统带来很大负担。数据库要向WEB前端传输量太大反而效率低。

2、fetch()或fetchall()有几个参数:

mixed pdostatement::fetch([int fetch_style [,int cursor_orientation [,int cursor_offset]]])

array pdostatement::fetchAll(int fetch_style)

fetch_style参数:

■$row=$rs->fetchAll(PDO::FETCH_BOTH); FETCH_BOTH是默认的,可省,返回关联和索引。

■$row=$rs->fetchAll(PDO::FETCH_ASSOC); FETCH_ASSOC参数决定返回的只有关联数组。

■$row=$rs->fetchAll(PDO::FETCH_NUM); 返回索引数组

■$row=$rs->fetchAll(PDO::FETCH_OBJ); 如果fetch()则返回对象,如果是fetchall(),返回由对象组成的二维数组

代码如下:

$dbh = new PDO('mysql:host=localhost;dbname=access_control', 'root', '');

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$dbh->exec('set names utf8');

/*添加*/

//$sql = "INSERT INTO `user` SET `login`=:login AND `password`=:password";

$sql = "INSERT INTO `user` (`login` ,`password`)VALUES (:login, :password)"; $stmt = $dbh->prepare($sql); $stmt->execute(array(':login'=>'kevin2',':password'=>''));

echo $dbh->lastinsertid();

/*修改*/

$sql = "UPDATE `user` SET `password`=:password WHERE `user_id`=:userId";

$stmt = $dbh->prepare($sql);

$stmt->execute(array(':userId'=>'7', ':password'=>'4607e782c4d86fd5364d7e4508bb10d9'));

echo $stmt->rowCount();

/*删除*/

$sql = "DELETE FROM `user` WHERE `login` LIKE 'kevin_'"; //kevin%

$stmt = $dbh->prepare($sql);

$stmt->execute();

echo $stmt->rowCount();

/*查询*/

$login = 'kevin%';

$sql = "SELECT * FROM `user` WHERE `login` LIKE :login";

$stmt = $dbh->prepare($sql);

$stmt->execute(array(':login'=>$login));

while($row = $stmt->fetch(PDO::FETCH_ASSOC)){

print_r($row);

}

print_r( $stmt->fetchAll(PDO::FETCH_ASSOC));

?>

1 建立连接

代码如下:

$dbh=newPDO('mysql:host=localhost;port=3306; dbname=test',$user,$pass,array(

PDO::ATTR_PERSISTENT=>true

));

?>

持久性链接PDO::ATTR_PERSISTENT=>true

2. 捕捉错误

代码如下:

try{

$dbh=newPDO('mysql:host=localhost;dbname=test',$user,$pass);

$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

$dbh->exec("SET CHARACTER SET utf8");

$dbh=null; //断开连接

}catch(PDOException$e){

print"Error!:".$e->getMessage()."
";

die();

}

?>

3. 事务的

代码如下:

try{

$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

$dbh->beginTransaction();//开启事务

$dbh->exec("insertintostaff(id,first,last)values(23,'Joe','Bloggs')");

$dbh->exec("insertintosalarychange(id,amount,changedate)

values(23,50000,NOW())");

$dbh->commit();//提交事务

}catch(Exception$e){

$dbh->rollBack();//错误回滚

echo"Failed:".$e->getMessage();

}

?>

4. 错误处理

a. 静默模式(默认模式)

代码如下:

$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT); //不显示错误

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);//显示警告错误,并继续执行

$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//产生致命错误,PDOException

代码如下:

try{

$dbh = new PDO($dsn, $user, $password);

$sql = 'Select * from city where CountryCode =:country';

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

$stmt = $dbh->prepare($sql);

$stmt->bindParam(':country', $country, PDO::PARAM_STR);

$stmt->execute();

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

print $row['Name'] . "/t";

}

} // if there is a problem we can handle it here

catch (PDOException $e) {

echo 'PDO Exception Caught. ';

echo 'Error with the database:
';

echo 'SQL Query: ', $sql;

echo 'Error: ' . $e->getMessage();

}

?>

1. 使用 query()

代码如下:

$dbh->query($sql); 当$sql 中变量可以用$dbh->quote($params); //转义字符串的数据

$sql = 'Select * from city where CountryCode ='.$dbh->quote($country);

foreach ($dbh->query($sql) as $row) {

print $row['Name'] . "/t";

print $row['CountryCode'] . "/t";

print $row['Population'] . "/n";

}

?>

2. 使用 prepare, bindParam和 execute [建议用,同时可以用添加、修改、删除]

代码如下:

$dbh->prepare($sql); 产生了个PDOStatement对象

PDOStatement->bindParam()

PDOStatement->execute();//可以在这里放绑定的相应变量

?>

3. 事物

代码如下:

try {

$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', '');

$dbh->query('set names utf8;');

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$dbh->beginTransaction();

$dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES ('mick', 22);");

$dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES ('lily', 29);");

$dbh->exec("Insert INTO `test`.`table` (`name` ,`age`)VALUES ('susan', 21);");

$dbh->commit();

} catch (Exception $e) {

$dbh->rollBack();

echo "Failed: " . $e->getMessage();

}

?>

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

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

相关文章

HTML+CSS+JS实现 ❤️响应式团队❤️

效果演示: 代码目录: 主要代码实现: CSS样式: body {margin: 0;min-height: 100vh;display: flex;justify-content: center;align-items: center;background-color: #f7f7f7; }.section-heading {font-family: "Dancing Scr…

canal mysql5.6_超详细的Canal入门,看这篇就够了!

思维导图文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary前言我们都知道一个系统最重要的是数据,数据是保存在数据库里。但是很多时候不单止要保存在数据库中,还要同步保存到Elastic Search、HBase、…

HTML+CSS+JS实现React简单的计算器实例

效果演示:文末获取源码 代码目录: 主要代码实现: CSS样式: :root {/* color palette :: https://coolors.co/app/d63c6b-5cc8ff-efefef-292f36-d6d6d6 */--white: #efefef;--white-alpha: rgba(239, 239, 239, .64);--grey: #d6d…

HTML+CSS+JS实现 ❤️六边形圆柱弹性动画特效❤️

效果演示: 代码目录: 主要代码实现: 部分CSS样式: :root {--w: 8vmin;/*** change width ***/--h: 15vmin;/*** change height ***/--m: 8vmin;/*** change margin ***/--s: 1.25s;/*** change speed ***/ }body {margin: 0;…

shell 写入文件_phpMyAdmin利用日志文件GetSHELL

phpMyAdmin简介phpMyAdmin 是众多MySQL图形化管理工具中使用最为广泛的一种,是一款使用PHP 开发的基于B/S模式的MySQL客户端软件,该工具是基于 Web 跨平台的管理程序,并且支持简体中文,用户可以在官网上下载最新版本的。GetSHELL前…

HTML+CSS+JS实现 ❤️酷炫彩虹旋转隧道特效❤️

效果演示: 代码目录: 主要代码实现: 部分CSS样式: #c {position: absolute;top: calc(50vh - 200px);left: calc(50vw - 200px);}#alpha {position: absolute;top: calc(50vh 220px);left: calc(50vw - 50px);width: 100px;hei…

informix和mysql的区别_DB2与Informix区别比较

DB2与Informix比较特性 DB2 Informix开放性/可移植性 IBMDB2UDB在各层面,从网络协议的支持到应用开发程序的编程接口,数据库存储程序及触发器,服务器之间的分布式运作,都是基于最新的国际标准,以确保其开放性及移植性。…

HTML+CSS+JS实现 ❤️照相机快门图片动画特效❤️

效果演示: 代码目录: 主要代码实现: 部分CSS样式: html {height: 100%;overflow: hidden; }body {min-height: 100%; }.container {cursor: pointer;background-position: center center;background-size: cover;background-im…

往map里的vector添加_面试官问我同步容器(如Vector)的所有操作一定是线程安全的吗?我懵了!...

为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器、并发容器、阻塞队列等。最常见的同步容器就是Vector和Hashtable了,那么,同步容器的所有操作都是线程安全的吗?这个问…

HTML+CSS+JS实现 ❤️3D方块弹跳动画特效❤️

效果演示: 代码目录: 主要代码实现: 部分CSS样式: *, *::before, *::after {padding: 0;margin: 0 auto;box-sizing: border-box;transform-style: preserve-3d; }body {background-color: black;min-height: 100vh;display: f…

HTML+CSS+JS实现 ❤️520爱心背景表白网页动画特效❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; 部分HTML代码 : <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8"><title>好朋友-相册</title&…

pillow python 划线_Python-PIL(pillow)图片处理入门(一)

Pillow是Python里的图像处理库(PIL&#xff1a;Python Image Library)&#xff0c;提供了了广泛的文件格式支持&#xff0c;强大的图像处理能力&#xff0c;主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。1)使用 Image 类PIL最重要的类是 Image class, 你可以…

python中的键不允许重复_为什么python允许您使用重复键创建字典

>>> d {a : b, a : c}>>> d{a: c}不,这只是你使用预先存在的密钥初始化一个字典,它只是覆盖了现有密钥的当前值.>>> dis.dis("d {a : b, a : c}")1 0 BUILD_MAP 23 LOAD_CONST 0 (b)6 LOAD_CONST 1 (a)9 STORE_MAP10 LOAD_CONST 2 (c)1…

HTML+CSS+JS实现 ❤️three 3D铅笔绘图工具特效❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; 部分CSS样式&#xff1a; #mfPreviewBar {display: none !important; }html, body {position: fixed;overflow: hidden;touch-action: none; }body {background-color: #f7f4f0;cursor: url("http…

mysql linux改密码忘记了怎么办_linux上mysql改密码忘了怎么办?

解决方法&#xff1a;1、在my.cnf中&#xff0c;增加“[mysqld]”和“skip-grant-tables”2行代码&#xff0c;用于登录时跳过密码验证&#xff1b;2、启动mysql服务&#xff0c;并登录mysql&#xff1b;3、连接mysql数据库&#xff0c;使用UPDATE命令修改用户密码即可。linux上…

HTML+CSS+JS实现 ❤️透明的水滴文字背景特效❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; 部分CSS样式&#xff1a; import url(https://fonts.googleapis.com/css2?familyMontserrat:wght100&displayswap); import url(https://fonts.googleapis.com/css2?familyPoppins:wght900&d…

sqoop导出数据单mysql_sqoop导出hive表数据到mysql

直接在mysql里从本地文件系统导入数据mysql》LOAD DATA LOCAL INFILE C:\\Users\\asys\\Documents\\Tencent Files\\13174605\\FileRecv\\2015082818 INTO TABLE track_logFIELDS TERMINATED BY \t LINES TERMINATED BY \n; (注意这里文件是从linux导出的&#xff0c;以\n结尾…

HTML+CSS+JS实现 ❤️3D旋转魔方图片相册特效❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; 部分CSS样式&#xff1a; background: url(../img/s3.jpg);background-size: 100% 100%;opacity: 0.8;transform: rotateY(90deg) translateZ(200px); }.box .box1 .left {background: url(../img/s4.jp…

HTML+CSS+JS实现 ❤️响应式的幸运大转盘❤️

效果演示&#xff1a; 代码目录&#xff1a; 主要代码实现&#xff1a; 部分CSS样式&#xff1a; .winnerBox {max-width: 40rem;padding: 30px;margin: 30px auto;/*height: calc(100vh - 98px);*//*background-color: #fd6504 #9470fd;*/background: linear-gradient(to b…

maya python 开根号_maya python

胡泳滨MayaPython简易教程&#xff0c;如需转载&#xff0c;请标明出处地址&#xff1a;http://huyongbin.blogbus.com/c3363976/谢谢配合&#xff01;MayaPython第一篇 - 介绍大家好&#xff0c;这是一个简易的MAYA PYTHON学习教程。简易教程的目的是可以让更多的人快速掌握这…