PHP连接MySQL数据库的几种方法
1. 最简单的方式-mysql(面向过程)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<?php
$con = mysql_connect("localhost","root","password");
$select_db = mysql_select_db('test');
if (!$select_db) {
die("could not connect to the db:\n" . mysql_error());
}
//查询代码
$sql = "select * from db_table";
$res = mysql_query($sql);
if (!$res) {
die("could get the res:\n" . mysql_error());
}
//抓取查询结果
while ($row = mysql_fetch_assoc($res)) {
print_r($row);
}
//关闭数据库连接
mysql_close($con);
?>
|
2.新的方式-mysqli(面向过程)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<?php
$mysql_server_name = 'localhost'; //改成自己的mysql数据库服务器
$mysql_username = 'root'; //改成自己的mysql数据库用户名
$mysql_password = 'password'; //改成自己的mysql数据库密码
$mysql_database = 'test'; //改成自己的mysql数据库名
$conn=mysqli_connect($mysql_server_name,$mysql_username,$mysql_password,$mysql_database); //连接数据库
//连接数据库错误提示
if (mysqli_connect_errno($conn)) {
die("连接 MySQL 失败: " . mysqli_connect_error());
}
mysqli_query($conn,"set names utf8"); //数据库编码格式
// mysqli_set_charset($conn,"utf8");//设置默认客户端字符集。
// mysqli_select_db($conn,$mysql_database); //更改连接的默认数据库
//查询代码
$sql = “select * from db_table”;
$query = mysqli_query($conn,$sql);
//抓取结果
while($row = mysqli_fetch_array($query)){
echo $row['title'];
}
// 释放结果集+关闭MySQL数据库连接
mysqli_free_result($result);
mysqli_close($conn);
?>
|
3.常用方式-mysqli(面向对象)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<?php
//连接数据库方式1
$conn = new mysqli('localhost', 'root', 'password', 'test');
//连接数据库方式2
// $conn = new mysqli();
// $conn -> connect('localhost', 'root', 'password', 'test');
//check connection (检查PHP是否连接上MYSQL)
if ($conn -> connect_errno) {
printf("Connect failed: %s\n", $conn->connect_error);
exit();
}
//查询代码
$sql = “select * from db_table”;
$query = $conn->query($sql);
while($row = $query->fetch_array()){
echo $row['title'];
}
//释放结果集+关闭MySQL连接
$query1 -> free_result();
$conn -> close();
?>
|
4.PDO连接MySQL数据库
1
2
3
4
5
6
7
8
9
10
11
12
|
<?php
$db = new PDO('mysql:host=localhost;dbname=test', 'root', 'password');
try {
foreach ($db->query('select * from db_table') as $row){
print_r($row);
}
$db = null; //关闭数据库
}
catch (PDOException $e) {
echo $e->getMessage();
}
?>
|
5.ADODB连接MySQL数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?php
//安装驱动-引入类即可
require_once './adodb5/adodb.inc.php';
$conn = &ADONewConnection('mysql');
$conn->connect('localhost','root','password','test');
$conn->Execute("set names utf8");
//查询代码
$res = $conn->Execute("select * from db_table");
if (!$res){
echo $conn->ErrorMsg();
}
else{
var_dump($res);
}
//关闭连接
$conn->close();
?>
|
6.总结-关闭mysql数据库的连接方法
1
2
3
4
5
|
MySQL - 面向过程 mysql_close($conn);
MySQLi - 面向过程 mysqli_close($conn);
MySQLi - 面向对象 $conn->close();
PDO $conn = null;
ADODB $conn->close();或 $conn->free();
|
php操作mysql
简要谈谈php中mysql,mysqli,mysqlnd,pdo到底是什么?
名词解释:
最开始的初学者,往往搞不清mysqli,mysqlnd,pdo到底是什么,下面先直接贴出最直观的名字吧。
MYSQL: This extension is deprecated as of PHP 5.5.0, and has been removed as of PHP 7.0.0.
MYSQLI: MySQL Improved Extension
MySQLND: MySQL Native Drive
PDO: The PHP Data Objects。extension defines a lightweight, consistent interface for
accessing databases in PHP。
以上摘自 PHP官方手册: http://php.net/manual/en/book.mysqli.php
用中文说:
MYSQL 也叫 Original MySQL,PHP4版本的MYSQL扩展,从PHP5起已经被废弃,并别从PHP7开始已经被移除。
MYSQLI 叫做 “MySQL增强扩展”。
MYSQLND MYSQL NATIVE DIRVER 叫做MYSQL “官方驱动”或者更加直接点的叫做“原生驱动”
PDO PHP Data Objects PHP数据对象,是PHP应用中的一个数据库抽象层规范。
什么是API?
一个应用程序接口(Application Programming Interface的缩写),定义了类,方法,函数,变量等等一切 你的应用程序中为了完成特定任务而需要调用的内容。在PHP应用程序需要和数据库进行交互的时候所需要的API 通常是通过PHP扩展暴露出来(给终端PHP程序员调用)。
上文所说的MYSQL 和MYSQLI扩展就提供了这样的API。
什么是驱动?
驱动是一段设计用来于一种特定类型的数据库服务器进行交互的软件代码。驱动可能会调用一些库,比如MySQL客户端库或者MySQL Native驱动库。 这些库实现了用于和MySQL数据库服务器进行交互的底层协议。
在PHP拓展的角度上看,MYSQL和MYSQLi还是比较上层的拓展,依赖更底层的库去连接和访问数据库。
上文所说的MYSQLND 就是所说的底层的数据库驱动。当然,还有一个驱动叫做libmysqlclient。至于如何选择使用这两种驱动的哪一种,请看这里选择哪一种底层数据库驱动
总的来说:
从应用的层面上看,我们通过PHP 的MYSQL或者MYSQLi扩展提供的API去操作数据库。
从底层来看,MYSQLND提供了底层和数据库交互的支持(可以简单理解为和MySQL server进行网络协议交互)。
而PDO,则提供了一个统一的API接口,使得你的PHP应用不去关心具体要连接的数据库服务器系统类型。也就是说,如果你使用PDO的API,可以在任何需要的时候无缝切换数据库服务器。比如MYSQL,SQLITE任何数据库都行。
即从大部分功能上看,PDO提供的API接口和MYSQLI提供的接口对于普通的增删改查效果是一致的。
想更多去了解他们的区别和联系,可以手动去编译一下PHP的源代码。注意参数
编译配置
--enable-pdo
--with-pdo-mysql
--enable-mysqlnd
--with-mysqli
--with-mysql //php7的已经不再支持,此参数configure 的时候会报ERROR
php安装完模块
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# /usr/local/services/php7/bin/php -m
[PHP Modules]
bcmath
bz2
calendar
Core
ctype
curl
date
dba
dom
exif
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
igbinary
intl
json
libxml
mbstring
mcrypt
memcache
memcached
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlreader
xmlrpc
xmlwriter
xsl
Zend OPcache
zip
zlib
[Zend Modules]
Zend OPcache
|