您的位置:首页 > 编程语言 > PHP开发

php通过Mysqli和PDO连接mysql数据详解

2016-07-29 14:14 861 查看

前言

在实际开发中,关于数据库操作类,很少是自己去写,大多是通过一些框架去实现,突然自己去写,还是需要借阅手册之类,于是我觉得有必要去总结一下,php连接mysql的方法,php连接mysql,可以通过mysql扩展、mysqli扩展,pdo扩展,因为高版本的php将移除mysql_系列方法,故在此只总结另外两种连接方式。首先我们得确保php的这两个扩展是否已经打开,查看php.ini配置文件如下:



提示,如有有的人说,我打开了扩展库(即去掉了,前面的';'),仍然一直提示mysqli_或pdo系列方法找不到,这很可能是因为你没有指定扩展库所在目录。找到extension_dir 参数,指定扩展所在目录即可

extension_dir = "D:/wamp/bin/php/php5.5.12/ext/"

配置文件

首先我们将连接数据库需要的配置文件,单独出来,这样就不需要每次都去写,需要的时候,直接include或者require包含进来就可以了。如果关于include与require不清楚的,可以查考http://blog.csdn.net/hsd2012/article/details/51089785

文件名conf.php

return array(

'host'=>'127.0.0.1',

'user'=>'root',

'password'=>'',//因为测试,我就不设置密码,实际开发中,必须建立新的用户并设置密码

'dbName'=>'xxpt',

'charSet'=>'utf8',

'port'=>'3306'

);



通过mysqli扩展连接

mysqli有两种方式去连接mysql,且支持预处理,一种是面向对象,一种是面向过程。

1.面向过程连接mysql

$dbConf=include 'conf.php';

function openDb($dbConf){

$conn=mysqli_connect($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']) or die('打开失败');

//当然如上面不填写数据库也可通过mysqli_select($conn,$dbConf['dbName'])来选择数据库

mysqli_set_charset($conn,$dbConf['charSet']);//设置编码

return $conn;

}

function closeDb($conn){

mysqli_close($conn);

}

//1.打开连接

$conn=openDb($dbConf);

//2query方法执行增、查、删、改

$sql='SELECT t.`id1` from `t1` as t';

/*************数据查询***************************/

$rs=$conn->query($sql);

//从结果集中读取数据

//fetch_assoc:返回键值对形式,键位字段名、fetch_row:返回键值对形式,键值为数值、fetch_array:返回1和2两种形式的组合

$data=array();//保存数据

while($tmp=mysqli_fetch_assoc($rs)){//每次从结果集中取出一行数据

$data[]=$tmp;

}

//对数据进行相应的操作

print_r($data);//输出数据

/*************数据插入***************************/

$sql='INSERT INTO `t1`(`id1`,`id2`) VALUES(3,4);';

$rs=$conn->query($sql);

//3.关闭连接

closeDb($conn);

2.面向对象方式连接mysql

$dbConf=include 'conf.php';

//打开

$conn=new mysqli($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']);

if(!$conn){

die('数据库打开失败');

}

//执行增删改查

/*************数据查询***************************/

$sql='SELECT t.`id1` from `t1` as t';

$rs=$conn->query($sql);//获取结果集

//通过fetch_assoc、fetch_array、fetch_row从结果集中获取数据

while ($tmp=$rs->fetch_assoc()) {

print_r($tmp);

}

/*************数据删除***************************/

$sql='DELETE FROM `t1` WHERE `id1`=3';

$rs=$conn->query($sql);//获取结果集

print_r($rs);$conn->close();

3.mysqli预处理

主要讲解mysli对象编程的预处理,至于面向过程变成的预处理使用mysqli_prepare就不在介绍
$dbConf=include 'conf.php';

//打开

$conn=new mysqli($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']);

if(!$conn){

die('数据库打开失败');

}

//执行增删改查

/*************数据查询***************************/

$sql='SELECT * from `t1` as t WHERE id2>?';

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

if(!$stmt){

die('sql语句有问题');

}

//绑定参数

$id2=2;

$stmt->bind_param('i',$id2);//不能写成bind_param('i',2)

//执行

$stmt->execute();

//将结果绑定发到指定的参数上

$stmt->bind_result($id1, $id2);

//获取结果

while ($tmp=$stmt->fetch()) {

print_r('id1='.$id1.',id2='.$id2);

echo '</br>';

}

//关闭

$stmt->free_result();//释放结果

$stmt->close();//关闭预编译的指令.

$conn->close();//关闭连接

预处理绑定参数中参数类型说明如下



php使用PDO方式连接mysql

$dbConf=include 'conf.php';

//打开

$pdo=myPDO::getInstance($dbConf);

/*************数据查询***************************/

$sql='SELECT t.`id1` from `t1` as t';

$rs=$pdo->query($sql);

$data=$rs->fetchAll();//取出所有结果

print_r($data);

/*************数据更新***************************/

$sql='UPDATE t1 SET t1.`id1`=11 WHERE t1.`id1`=1';

$rs=$pdo->query($sql);

/**

* 数据库pdo连接

*/

class myPDO{

private static $pdo;

private function __construct(){

//code

}

private function __clone(){

//code

}

/**

* 获取实例化的PDO,单例模式

* @return PDO

*/

public static function getInstance($dbConf){

if(!(self::$pdo instanceof PDO)){

$dsn ="mysql:host=".$dbConf['host'].";port=".$dbConf['port'].";dbname=".$dbConf['dbName'].";charset=".$dbConf['charSet'];

try {

self::$pdo = new PDO($dsn,$dbConf['user'], $dbConf['password'], array(PDO::ATTR_PERSISTENT => true,PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); //保持长连接

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

} catch (PDOException $e) {

print "Error:".$e->getMessage()."<br/>";

die();

}

}

return self::$pdo;

}

}

pdo支持预处理,推荐使用预处理方式,以防sql注入。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: