前言

在实际开发中,关于数据库操作类,很少是自己去写,大多是通过一些框架去实现,突然自己去写,还是需要借阅手册之类,于是我觉得有必要去总结一下,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

  1. return array(
  2. 'host'=>'127.0.0.1',
  3. 'user'=>'root',
  4. 'password'=>'',//因为测试,我就不设置密码,实际开发中,必须建立新的用户并设置密码
  5. 'dbName'=>'xxpt',
  6. 'charSet'=>'utf8',
  7. 'port'=>'3306'
 

);


通过mysqli扩展连接

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

1.面向过程连接mysql

  1. $dbConf=include 'conf.php';
  2. function openDb($dbConf){
  3. $conn=mysqli_connect($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']) or die('打开失败');
  4. //当然如上面不填写数据库也可通过mysqli_select($conn,$dbConf['dbName'])来选择数据库
  5. mysqli_set_charset($conn,$dbConf['charSet']);//设置编码
  6. return $conn;
  7. }
  8. function closeDb($conn){
  9. mysqli_close($conn);
  10. }
  11. //1.打开连接
  12. $conn=openDb($dbConf);
  13. //2query方法执行增、查、删、改
  14. $sql='SELECT t.`id1` from `t1` as t';
  15. /*************数据查询***************************/
  16. $rs=$conn->query($sql);
  17. //从结果集中读取数据
  18. //fetch_assoc:返回键值对形式,键位字段名、fetch_row:返回键值对形式,键值为数值、fetch_array:返回1和2两种形式的组合
  19. $data=array();//保存数据
  20. while($tmp=mysqli_fetch_assoc($rs)){//每次从结果集中取出一行数据
  21. $data[]=$tmp;
  22. }
  23. //对数据进行相应的操作
  24. print_r($data);//输出数据
  25. /*************数据插入***************************/
  26. $sql='INSERT INTO `t1`(`id1`,`id2`) VALUES(3,4);';
  27. $rs=$conn->query($sql);
  28. //3.关闭连接
  29. closeDb($conn);

2.面向对象方式连接mysql

  1. $dbConf=include 'conf.php';
  2. //打开
  3. $conn=new mysqli($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']);
  4. if(!$conn){
  5. die('数据库打开失败');
  6. }
  7. //执行增删改查
  8. /*************数据查询***************************/
  9. $sql='SELECT t.`id1` from `t1` as t';
  10. $rs=$conn->query($sql);//获取结果集
  11. //通过fetch_assoc、fetch_array、fetch_row从结果集中获取数据
  12. while ($tmp=$rs->fetch_assoc()) {
  13. print_r($tmp);
  14. }
  15. /*************数据删除***************************/
  16. $sql='DELETE FROM `t1` WHERE `id1`=3';
  17. $rs=$conn->query($sql);//获取结果集
  18. print_r($rs);$conn->close();

3.mysqli预处理

主要讲解mysli对象编程的预处理,至于面向过程变成的预处理使用mysqli_prepare就不在介绍
$dbConf=include 'conf.php';  
  1. //打开
  2. $conn=new mysqli($dbConf['host'],$dbConf['user'],$dbConf['password'],$dbConf['dbName'],$dbConf['port']);
  3. if(!$conn){
  4. die('数据库打开失败');
  5. }
  6. //执行增删改查
  7. /*************数据查询***************************/
  8. $sql='SELECT * from `t1` as t WHERE id2>?';
  9. $stmt=$conn->prepare($sql);
  10. if(!$stmt){
  11. die('sql语句有问题');
  12. }
  13. //绑定参数
  14. $id2=2;
  15. $stmt->bind_param('i',$id2);//不能写成bind_param('i',2)
  16. //执行
  17. $stmt->execute();
  18. //将结果绑定发到指定的参数上
  19. $stmt->bind_result($id1, $id2);
  20. //获取结果
  21. while ($tmp=$stmt->fetch()) {
  22. print_r('id1='.$id1.',id2='.$id2);
  23. echo '</br>';
  24. }
  25. //关闭
  26. $stmt->free_result();//释放结果
  27. $stmt->close();//关闭预编译的指令.
  28. $conn->close();//关闭连接

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

php使用PDO方式连接mysql

  1. $dbConf=include 'conf.php';
  2. //打开
  3. $pdo=myPDO::getInstance($dbConf);
  4. /*************数据查询***************************/
  5. $sql='SELECT t.`id1` from `t1` as t';
  6. $rs=$pdo->query($sql);
  7. $data=$rs->fetchAll();//取出所有结果
  8. print_r($data);
  9. /*************数据更新***************************/
  10. $sql='UPDATE t1 SET t1.`id1`=11 WHERE t1.`id1`=1';
  11. $rs=$pdo->query($sql);
  12. /**
  13. * 数据库pdo连接
  14. */
  15. class myPDO{
  16. private static $pdo;
  17. private function __construct(){
  18. //code
  19. }
  20. private function __clone(){
  21. //code
  22. }
  23. /**
  24. * 获取实例化的PDO,单例模式
  25. * @return PDO
  26. */
  27. public static function getInstance($dbConf){
  28. if(!(self::$pdo instanceof PDO)){
  29. $dsn ="mysql:host=".$dbConf['host'].";port=".$dbConf['port'].";dbname=".$dbConf['dbName'].";charset=".$dbConf['charSet'];
  30. try {
  31. self::$pdo = new PDO($dsn,$dbConf['user'], $dbConf['password'], array(PDO::ATTR_PERSISTENT => true,PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); //保持长连接
  32. self::$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
  33. } catch (PDOException $e) {
  34. print "Error:".$e->getMessage()."<br/>";
  35. die();
  36. }
  37. }
  38. return self::$pdo;
  39. }
  40. }

pdo支持预处理,推荐使用预处理方式,以防sql注入。

php通过Mysqli和PDO连接mysql数据详解的更多相关文章

  1. MySQLi 和 PDO 连接 MySQL

    PHP 连接 MySQL PHP 5 及以上版本建议使用以下方式连接 MySQL : MySQLi extension ("i" 意为 improved) PDO (PHP Dat ...

  2. oracle通过dblink连接mysql配置详解(全Windows下)

    关于oracle通过dblink连接mysql,经过了两周的空闲时间研究学习,终于配置好了,真是不容易啊,仔细想想的话,其实也没花多长时间,就是刚开始走了一段弯路,所以把这次的经验分享出来,让大家少走 ...

  3. 20.java-JDBC连接mysql数据库详解

    1.JDBC介绍 jdbc(java database connectivity)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成. JDBC需要用到的类和接口有: Dri ...

  4. linux 下远程连接mysql命令详解

    http://hi.baidu.com/aaxh/blog/item/49bcb78ffe3dfae4f01f36b2.html一.MySQL 连接本地数据库,用户名为“root”,密码“123”(注 ...

  5. 使用 MySQLi 和 PDO 向 MySQL 插入多条数据

    PHP MySQL 插入多条数据 使用 MySQLi 和 PDO 向 MySQL 插入多条数据 mysqli_multi_query() 函数可用来执行多条SQL语句. 以下实例向 "MyG ...

  6. 使用 MySQLi 和 PDO 向 MySQL 插入数据

    PHP MySQL 插入数据 使用 MySQLi 和 PDO 向 MySQL 插入数据 在创建完数据库和表后,我们可以向表中添加数据. 以下为一些语法规则: PHP 中 SQL 查询语句必须使用引号 ...

  7. php PDO连接mysql

    近期在linux装了新的环境.php5.6+mysql5.5+nginx. 然后用原来的mysql链接数据库出现的错误. 原因就是说连接数据库的方法太旧.建议我用mysqli和PDO来连接数据库. 好 ...

  8. //使用PDO连接mysql数据库

    <?php //使用PDO连接mysql数据库 class pdo_con{     var $dsn = 'mysql:dbname=test; host:127.0.0.1';     va ...

  9. php之PDO连接mysql数据库,增删改查等等操作实例

    我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严就有SQL注入风险,导致网站被攻击. 虽然可以用mysql_real_escape_string ...

随机推荐

  1. C#连接Oracle数据库查询数据

    C#连接Oracle数据库可以实现许多我们需要的功能,下面介绍的是C#连接Oracle数据库查询数据的方法,如果您对C#连接Oracle数据库方面感兴趣的话,不妨一看. using System; u ...

  2. Java中用反码表示整数,及int到byte的转换

    Java中的整数都是通过补码表示的,当整数为正数时,补码和原码相同,当整数为负数时,补码为原码按位取反(符号位除外),然后加1. 通过一些例子可以比较明显的看出: int a = -1; System ...

  3. mysql服务1067错误:修改mysql可执行文件路径

    今天遇到mysql服务1067错误的问题,设置使用系统账户也无法启动mysql,后面认证看了系统的配置信息,发现启动文件也就是mysql安装路径是之前的(也说明之前安装mysql,没去卸载直接安装新的 ...

  4. Linux crontab使用及注意事项

    渗透测试中,经常会用到crontab来执行计划任务,从而实现后门程序的隐藏,但crontab有几个坑点还是需要记录一下,方便日后使用时及时查询 1.crontab配置格式 # Example of j ...

  5. Linux:时间同步

    时间同步 硬件时间的设置 hwclock clock clock和hwclock用法相近,只用一个就行,只不过clock命令除了支持x86硬件体系外,还支持Alpha硬件体系. 查看硬件时间 hwcl ...

  6. 《Drools7.0.0.Final规则引擎教程》第4章 注释&错误信息

    注释 像Java开发语言一样,Drools文件中也可以添加注释.注释部分Drools引擎是会将其忽略调的.单行注释使用"//",示例如下: rule "Testing C ...

  7. CUDA Samples: heat conduction(模拟热传导)

    以下CUDA sample是分别用C++和CUDA实现的模拟热传导生成的图像,并对其中使用到的CUDA函数进行了解说,code参考了<GPU高性能编程CUDA实战>一书的第七章,各个文件内 ...

  8. wireshark的一些快捷键

    恢复原来的大小   ‘crtl’+‘=’  即按住crtl建和=键(backspace左边那个键) 缩小 ‘crtl’+‘-’ 即按住crtl建和-键(backspace左边第二个键) 放大 ‘crt ...

  9. NSStringFromSelector(_cmd)和self

    1._cmd是隐藏的参数,代表当前方法的selector,他和self一样都是每个方法调用时都会传入的参数,动态运行时会提及如何传的这两个参数, 你在方法里加入CCLOG(@\"%@, %@ ...

  10. Encode Adjacent Letters

    Encode a string by counting the consecutive letter. (i.e., "aaaabbxxxyyz" might become &qu ...