文档章节

[PHP]PHP编程操作Mysql数据库的三种方式

secondriver
 secondriver
发布于 2015/09/17 09:12
字数 1091
阅读 10
收藏 0


    当我开始去接触PHP的时候,真切的感受到其所具有的魅力,本着学习的态度和打破固有的语言和模式的想法,开始了PHP之旅,总的来说,走的还是比较顺利,在其中能够看到C,Java,Perl影子,学习曲线不大,但是做好产品仍然有着一条漫漫长路。


   多余的话不说了,慢慢感受和领悟,本文主要讲述PHP操作数据库的三种扩展。


  如下图是PHP访问数据库的三种扩展方式:

  wKioL1QBkeWAA_GrAAD2LHLHPDQ256.jpg

    

  下面举出三种方式访问数据库并查询数据的实例代码:

  1.mysql扩展

  

<?php
//1:获取数据库连接
$connection = @ mysql_connect('127.0.0.1:3306', 'root', 'root') or die('Mysql connection failed ' . mysql_error());
//2:选择数据库
mysql_select_db('phptest') or die('Database phptest not exist ' . mysql_error());
//3:查询数据
$sql = 'SELECT id as `编号`, name as `姓名`, birthday as `出生日期`, phone as `联系方式` , address as `地址` ' .
'FROM  `t_user` LIMIT 0 , 30';
$result = mysql_query($sql) or die('Query failed ' . mysql_error());
//4:处理查询结果
#打印查询数据
echo '<table>';
#打印列信息
$i = 0;
echo '<tr>';
while ($i < mysql_num_fields($result)) {
	$meta = mysql_fetch_field($result);
	echo '<td>';
	echo $meta->name;
	echo '</td>';
	$i++;
}
echo '<tr/>';
#打印行记录
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
	echo '<tr>';
	foreach ($line as $value) {
		echo '<td>' . $value . '</td>';
	}
	echo '</tr>';
}
echo '</table>';
//5:释放结果内存
mysql_free_result($result);
//6:关闭数据库连接
mysql_close($connection);
?>


  2.mysqli扩展

  

<?php
#使用面向对象的方式操作mysql数据库
//1:创建mysqli对象
$mysqli = new mysqli();
//2:连接数据库
$mysqli->connect('127.0.0.1', 'root', 'root');
$mysqli->select_db('phptest');
if ($mysqli->connect_errno) {
	echo '连接数据库失败';
	exit ();
}
//3:获取MySQLi_STMT(执行SQL命令)对象,$stmt
$sql = 'SELECT id as `编号`, name as `姓名`, birthday as `出生日期`, phone as `联系方式` , address as `地址` ' .
'FROM  `t_user` LIMIT 0 , 30';
if ($stmt = $mysqli->prepare($sql)) {
	#执行查询
	$stmt->execute();
	$stmt->bind_result($id, $name, $birthday, $phone, $address);
	#打印查询数据
	echo '<table>';
	#打印列信息
	echo '<tr>';
	$meta = $stmt->result_metadata()->fetch_fields();
	foreach ($meta as $val) {
		echo '<td>';
		echo $val->name;
		echo '</td>';
	}
	echo '<tr/>';
	while ($stmt->fetch()) {
		echo '<tr>';
		echo '<td>' . $id . '</td>';
		echo '<td>' . $name . '</td>';
		echo '<td>' . $birthday . '</td>';
		echo '<td>' . $phone . '</td>';
		echo '<td>' . $address . '</td>';
		echo '</tr>';
	}
	echo '</table>';
	echo '<h4>查询结果记录数:' . $stmt->num_rows.'</h4>';
	//4:关闭MySQLi_STMT
	$stmt->close();
}
//5:关闭数据库连接
$mysqli->close();
?>

  上面使用的是mysqli扩展的面向对象风格的方式进行数据库操作,如何要使用面向过程的风格操作数据库则需要使用函数。比如关闭数据库连接,面向对象风格则是:$mysqli->close() 而使用面向过程风格则是:close($mysqli),具体详则可以参见PHP_Manual


 3.PDO_MYSQL扩展

  数据库连接配置信息pdo-inc.php:

  

<?php
 
$dsn = 'mysql:host=127.0.0.1:3306;dbname=phptest';
$username = 'root';
$password = 'root';

$opt = array (
	PDO :: ATTR_TIMEOUT => 40
);

?>

 

  使用PDO访问数据库

  

<?php
//1:引入数据库连接信息
require_once ('pdo-inc.php');
//2:创建PDO对象
try {
	$pdo = new PDO($dsn, $username, $password, $opt);
} catch (PDOException $e) {
	echo '数据库连接失败 ' . $e->getMessage();
	exit ();
}
$sql = 'SELECT id as `编号`, name as `姓名`, birthday as `出生日期`, phone as `联系方式` , address as `地址` ' .
'FROM  `t_user` LIMIT 0 , 30';
//3:创建预编译命令对象PDOStatement
if ($stmt = $pdo->prepare($sql)) {
	//4:执行
	$stmt->execute();
	#打印查询数据
	echo '<table>';
	echo '<tr>';
	for ($i = 0, $columnCount = $stmt->columnCount(); $i < $columnCount; $i++) {
		$meta = $stmt->getColumnMeta($i);
		echo '<td>';
		echo $meta['name'];
		echo '</td>';
	}
	echo '<tr/>';
	$row_num = 0;
	while ($row = $stmt->fetch(PDO :: FETCH_NUM)) {
		$row_num++;
		echo '<tr>';
		foreach ($row as $value) {
			echo '<td>' . $value . '</td>';
		}
		echo '</tr>';
	}
	echo '</table>';
	#需要统计查询的行数
	echo '一共' . $row_num . '条记录<br/>使用PDOStatement::rowCount来统计,一共' . $stmt->rowCount() . '条记录';
	//5:关闭游标
	$stmt->closeCursor();
}
//6:释放PDO对象
$pdo = null;
?>

  看到上面代码很明显的不同在于访问Mysql数据库,却再也看不到Mysql相关函数和字样,这一点正是PDO所希望的,PDO使得PHP访问数据库将面向接口而不是具体的实现,这也为改变数据库而不用担心应用程序与数据库过度的耦合提供了基础。简而言之就是做到了面向对象中的面向接口编程的原则。


  就操作数据而言,更多的是针对API来编程,具备数据库的相关知识(主要是SQL)和熟悉相关API既可以操作数据库,面对PHP操作数据库的多种扩展,到底使用哪一种方式,暂时不知道,看情况吧。

本文出自 “野马红尘” 博客,谢绝转载!

© 著作权归作者所有

secondriver
粉丝 10
博文 229
码字总数 233821
作品 0
广州
程序员
私信 提问
(四)PHP扩展PDO和Mysqli对比分析与总结归纳

(四)PHP扩展PDO和Mysqli对比分析与总结归纳 我的系统版本为CentOS7.5,PHP Version 7.1.18 php操作mysql数据库,常用的三种驱动扩展:mysql、mysqli、pdo,其中mysql在php7之后去掉了。重点...

Super_RD
04/24
0
0
浅谈php和.net的不同(一)

本人最近从asp.net转向了php,主攻方向是Web开发,感觉两者之间还是有不少的区别的。 1.相对于.net,php更偏向于解释性语言类型; 2.在.net中,我们操作的主要是封装好的对象-类库;在php中,...

笨小熊
2014/07/20
288
2
php连接mysql数据库的几种方式(mysql、mysqli、pdo)

php连接mysql数据库的几种方式(mysql、mysqli、pdo) www.111cn.net 编辑:flyfox 来源:转载 php与mysql的连接有三种API接口,分别是:PHP的MySQL扩展 、PHP的mysqli扩展 、PHP数据对象(PDO) ,...

DanEcho
2016/11/10
0
0
PHP(二)数据类型

变量是一种数据,是计算机内为某一个数据取的名字。 PHP没有声明变量的命令,变量在第一次赋值给它的时候被创建。 PHP是一门弱类型语言,不必向PHP声明该变量的数据类型,PHP会根据变量的值,...

ChuckleLiu
2015/12/21
58
0
LinuxPHP详解和mysql初探

浏览器只能够解码html格式的文档 动态网站是根据用户请求能做出对应响应甚至于对不同用户返回内容是不一样的 java:一直编译到处运行,是因为java的程序是在java的虚拟机中运行的,而底层系统...

GeniusLP
2017/11/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java发送html模板的高逼格邮件

最近做了一个监测k8s服务pod水平伸缩发送邮件的功能(当pod的cpu/内存达到指定阈值后会水平扩展出多个pod、或者指定时间内pod数应扩展到指定数量),一开始写了个格式很low的邮件,像下面这样...

码农实战
15分钟前
5
0
php-fpm配置文件详解/MariaDB密码重置、慢查询日志

来源:https://blog.csdn.net/Powerful_Fy php-fpm主配置文件路径:/usr/local/php-fpm/etc/php-fpm.conf #位于安装php安装目录下的etc/目录中,该文件中最后一行将配置文件指向:include=/...

asnfuy
19分钟前
3
0
川普给埃尔多安和内堪尼亚胡的信

任性 https://twitter.com/netanyahu/status/1186647558401253377 https://edition.cnn.com/2019/10/16/politics/trump-erdogan-letter/index.htm...

Iridium
41分钟前
12
0
golang-mysql-原生

db.go package mainimport ("database/sql""time"_ "github.com/go-sql-driver/mysql")var (db *sql.DBdsn = "root:123456@tcp(127.0.0.1:3306)/test?charset=u......

李琼涛
今天
5
0
编程作业20191021092341

1编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时 间。使用#define或const创建一个表示60的符号常量或const变量。通过while 循环让用户重复输入值,直到用户输入小于或等于0的值...

1李嘉焘1
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部