前言
在实际开发中,关于数据库操做类,不多是本身去写,大可能是经过一些框架去实现,忽然本身去写,仍是须要借阅手册之类,因而我以为有必要去总结一下,php链接mysql的方法,php链接mysql,能够经过mysql扩展、mysqli扩展,pdo扩展,由于高版本的php将移除mysql_系列方法,故在此只总结另外两种链接方式。首先咱们得确保php的这两个扩展是否已经打开,查看php.ini配置文件以下:javascript

提示,若有有的人说,我打开了扩展库(即去掉了,前面的';'),仍然一直提示mysqli_或pdo系列方法找不到,这极可能是由于你没有指定扩展库所在目录。找到extension_dir 参数,指定扩展所在目录便可php
extension_dir = "D:/wamp/bin/php/php5.5.12/ext/"java
配置文件
首先咱们将链接数据库须要的配置文件,单独出来,这样就不须要每次都去写,须要的时候,直接include或者require包含进来就能够了。若是关于include与require不清楚的,能够查考http://blog.csdn.net/hsd2012/article/details/51089785mysql
文件名conf.phpsql
- 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_set_charset($conn,$dbConf['charSet']);
- return $conn;
- }
- function closeDb($conn){
- mysqli_close($conn);
- }
-
- $conn=openDb($dbConf);
- $sql='SELECT t.`id1` from `t1` as t';
- $rs=$conn->query($sql);
- $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);
- 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);
- 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);
- $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);
-
- class myPDO{
- private static $pdo;
-
- private function __construct(){
-
- }
- private function __clone(){
-
- }
-
- 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注入。