php连接到mysql数据库,经典的方式就是使用mysql_connect(),具体代码如下:

mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
mysql_select_db($db_name);

    浏览器提示:本扩展自 PHP 5.5.0 起已废弃,并在将来会被移除。应使用 MySQLi 或 PDO_MySQL 扩展来替换之。于是一通搜索,就有了接下来这篇文章的来源。
        这里的mysql是一个扩展的API,目的是为了简化php对mysql数据库的操作。
mysqli
        mysqli是对mysql的一个增强版,出现在PHP
5 及以后的版本。它主要在一下几方面比mysql增强了:
        1、面向对象接口;2、prepared语句支持(译注:关于prepare请参阅mysql相关文档);3、多语句执行支持;4、事务支持;5、增强的调试能力;6、嵌入式服务支持
<?php
$link = mysqli_connect("localhost","root","123456","test") or die("Error " . mysqli_error($link)); //连接,test为数据库的名称
$query = "SELECT name FROM userInfo" or die("Error in the consult.." . mysqli_error($link));//查询
$result = mysqli_query($link, $query);//查询的结果
while($row = mysqli_fetch_array($result)) {
echo $row["name"] . "<br>";
}
?>

上面的这段代码是一个完整的从连接到查询再到关闭数据库的一个例子。从该例子中可以看到,mysql_connect()和mysqli_connect()函数的用法上的小区别。

//mysql
mysql_connect("localhost","root","123456");
mysql_select_db("userInfo"); //mysqli
mysqli_connect("localhost","root","123456","test");

mysqli的连接数据库方法中除了使用上述(又称之为面向过程)之外,另外一种就是面向对象方式:

<?php
$mysqli = new mysqli("localhost","root","123456","test") //填写mysql用户名、密码及数据库的名称
or die("Could not connect to MySQL server!");
$mysqli->query("set names utf8"); //设置数据库内数据的编码,相当于同时设置客户端、服务器端和脚本编码方式。
$sql = "select * from userInfo";
$result = $mysqli->query($sql);
if($result){
if($result->num_rows>0){
while($row =$result->fetch_array()){//循环输出结果集中的记录
echo ($row[0])." ";
echo ($row[1])." ";
echo ($row[2])." ";
echo "<br/>";
}
}
}else{
echo "Sorry!";
}
$result=NULL;
$mysqli->close();
?>

        这种用法中,使用mysqli之前要先new一个对象,然后使用该实例对象进行操作。

​PDO
    PHP的一个数据对象,它提供了一个统一的连接数据库的API,它代表的是和数据库之间的一个连接,类似于java中的jdbc。
        简单举例如下:
<?php
$pdo = new PDO('pgsql:host=192.168.1.111;port=5432;dbname=anydb', 'anyuser', 'pw');//连接到数据库
sleep(5);
$stmt = $pdo->prepare('SELECT * FROM sometable');
$stmt->execute();
$pdo = null;//关闭连接
?>
         由于从PHP
6 开始要完全使用PDO方式而非其他方式连接数据库,所以接下来详细研究一番:
1、为什么要用PDO,用PDO有什么好处?

PDO(PHP数据对象),是PHP访问数据库的一个轻量级的统一接口。它提供了一个数据访问抽象层,这也就是说无论什么数据库都能用相同的方法进行查询或读取。需要注意的是PDO本身并不能实现任何的数据库功能,而是必须要使用一个具体数据库的PDO驱动进行访问数据库服务。

2、怎么用PDO?

这里我们就以PHP的黄金搭档mysql作为例子看看:

PDO_MYSQL:PDO_MYSQL是PDO接口能够完成连接mysql数据库的驱动(注:仅使用于mysql
3.x以上版本)。

安装:打开php.ini文件,可以找到如下代码,这里可以看到mysql的驱动默认已经打开(前面没有用于注释的分号),如有连接其他数据库的需要,自行添加其他数据库的驱动程序(取出相应的项前面的分号,没有的添上)。

//各数据库的PDO驱动
extension=php_pdo.dll
extension=php_pdo_firebird.dll //Firebird
extension=php_pdo_informix.dll //Informix
extension=php_pdo_mssql.dll //sql server
extension=php_pdo_mysql.dll //mysql
extension=php_pdo_oci.dll //Oracle
extension=php_pdo_oci8.dll
extension=php_pdo_odbc.dll //DB2
extension=php_pdo_pgsql.dll //PostgreSQL
extension=php_pdo_sqlite.dll //SQLite

连接:通过创建PDO基类的实例创建连接。

//连接到数据库
$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
//处理连接错误
try {
$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
//查询
foreach($db->query('SELECT * from FOO') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
//关闭连接
$db = null;

PDO方式连接数据库mysql的实例:

<?php
$dbms='mysql'; //数据库 mysql
$host='localhost'; //数据库主机名
$dbName='test'; //数据库名
$user='root'; //连接用户名
$pass=''; //密码
$dsn="$dbms:host=$host;dbname=$dbName";
classdbextendsPDO{
publicfunction__construct(){
try{
parent::__construct("$GLOBALS[dsn]",$GLOBALS['user'],$GLOBALS['pass']);
}catch(PDOException$e){
die("Error: ".$e->__toString()."<br/>");
}
}
publicfinalfunctionquery($sql){
try{
returnparent::query($this->setString($sql));
}catch(PDOException$e){
die("Error: ".$e->__toString()."<br/>");
}
}
privatefinalfunctionsetString($sql){
echo"处理查询";
return $sql;
}
}
$db=new db();
$db->setAttribute(PDO::ATTR_CASE,PDO::CASE_UPPER);
foreach($db->query('select * from table_name') as $row){
print_r($row);
}
$db->exec('delete from table_name where id=11');
?>

3、更多的PDO方法:

PDO::beginTransaction — 启动一个事务
PDO::commit — 提交一个事务
PDO::__construct — 创建一个表示数据库连接的 PDO 实例
PDO::errorCode — 获取跟数据库句柄上一次操作相关的 SQLSTATE
PDO::errorInfo — Fetch extended error information associated with the last operation on the database handle
PDO::exec — 执行一条 SQL 语句,并返回受影响的行数
PDO::getAttribute — 取回一个数据库连接的属性
PDO::getAvailableDrivers — 返回一个可用驱动的数组
PDO::inTransaction — 检查是否在一个事务内
PDO::lastInsertId — 返回最后插入行的ID或序列值
PDO::prepare — Prepares a statement for execution and returns a statement object
PDO::query — Executes an SQL statement, returning a result set as a PDOStatement object
PDO::quote — Quotes a string for use in a query.
PDO::rollBack — 回滚一个事务
PDO::setAttribute — 设置属性
PDOStatement::bindColumn — 绑定一列到一个 PHP 变量
PDOStatement::bindParam — 绑定一个参数到指定的变量名
PDOStatement::bindValue — 把一个值绑定到一个参数
PDOStatement::closeCursor — 关闭游标,使语句能再次被执行。
PDOStatement::columnCount — 返回结果集中的列数
PDOStatement::debugDumpParams — 打印一条 SQL 预处理命令
PDOStatement::errorCode — 获取跟上一次语句句柄操作相关的 SQLSTATE
PDOStatement::errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息
PDOStatement::execute — 执行一条预处理语句
PDOStatement::fetch — 从结果集中获取下一行
PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组
PDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列。
PDOStatement::fetchObject — 获取下一行并作为一个对象返回。
PDOStatement::getAttribute — 检索一个语句属性
PDOStatement::getColumnMeta — 返回结果集中一列的元数据
PDOStatement::nextRowset — 在一个多行集语句句柄中推进到下一个行集
PDOStatement::rowCount — 返回受上一个 SQL 语句影响的行数
PDOStatement::setAttribute — 设置一个语句属性
PDOStatement::setFetchMode — 为语句设置默认的获取模式。
Exception::getMessage — 获取异常消息内容。
Exception::getPrevious — 返回异常链中的前一个异常
Exception::getCode — 获取异常代码
Exception::getFile — 获取发生异常的程序文件名称
Exception::getLine — 获取发生异常的代码在文件中的行号
Exception::getTrace — 获取异常追踪信息
Exception::getTraceAsString — 获取字符串类型的异常追踪信息
Exception::toString — 将异常对象转换为字符串
Exception::clone — 异常克隆

PHP连接到mysql的方法--mysqli和PDO的更多相关文章

  1. visual studio 2015连接到MySql相关问题

    vs中使用服务器资源管理器连接到MySQL没有成功.按照网上提供的解决方法,相关插件已经安装: 1.控制面板中,MySQL Connector Net 6.9.9已经安装(原安装版本为6.9.8,后升 ...

  2. 解决 Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in

    转载 php 5个版本,5.2.5.3.5.4.5.5,怕跟不上时代,新的服务器直接上5.5,但是程序出现如下错误:Deprecated: mysql_connect(): The mysql ext ...

  3. phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接。您应该检查配置文件中的主机、用户名和密码

    需要修改phpmyadmin的配置文件,让其连接到MySQL数据库,用记事本打开 config.inc.php 文件 <?php /* Servers configuration */ $i = ...

  4. mac 连接mysql提示 Warning: mysqli::real_connect(): (HY000/2002): No such file or directory

    mac 连接mysql的时候提示 Warning: mysqli::real_connect(): (HY000/2002): No such file or directory [说明1]MAC下M ...

  5. 解决Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in

    php 5个版本,5.2.5.3.5.4.5.5,怕跟不上时代,新的服务器直接上5.5,但是程序出现如下错误:Deprecated: mysql_connect(): The mysql extens ...

  6. 解决 phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接 问题

    phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接.您应该检查配置文件中的主机.用户名和密码,并确认这些信息与 MySQL 服务器管理员所给出的信息一致. 问题解决办法: 修改co ...

  7. Excel连接到MySQL,将Excel数据导入MySql,MySQL for Excel,,

    Excel连接到MySQL 即使当今时代我们拥有了类似微软水晶报表之类的强大报表工具和其他一些灵活的客户管 理应用工具,众多企业在分析诸如销售统计和收入信息的时候,微软的Excel依然是最常用的工具. ...

  8. MySQL 升级方法指南大全

    原文:MySQL 升级方法指南大全 通常,从一个发布版本升级到另一个版本时,我们建议按照顺序来升级版本.例如,想要升级 MySQL 3.23 时,先升级到 MySQL 4.0,而不是直接升级到 MyS ...

  9. eclipse怎么连接到MySQL中的表!!!!!

    简介: 用eclipse编写的好的代码,我们怎么才能连接到数据库呢?对于初学者,特别是在连接数据库这块经常会发生一些莫名的错误,一般来说,归根是我们连接数据库这一过程发生错误.那么我们如何来解决呢?那 ...

随机推荐

  1. ng file上传同域非同域

    跨域 vm.uploadFiles = function (file, errFiles) { if (file) { file.upload = Upload.upload({ url: vm.up ...

  2. 005 android jni 一个简单的报错

    在android中使用ndk开发需要使用到jni. 1. java.lang.UnsatisfiedLinkError: No implementation found for void com.fr ...

  3. css 定位标签设置格式

    td a {      color: #3c8dbc; } td a:hover {      color: #00bdd8; } 上例即为定位td下的a标签.即用来给表格中的链接,未访问时和hove ...

  4. 如何用MathType编辑圆圈符号

    数学往往是由很多的公式和符号组成的,一些用户朋友在写文章需要用到一些符号的时候,发现一般的编辑器很难满足一些比较专业的需求.这个时候就需要一款专业的数学公式编辑器.公式编辑器MathType就是这样诞 ...

  5. Laravel创建Route

    <?php /* |-------------------------------------------------------------------------- | Routes Fil ...

  6. 服务器之ipmitool

    一般命令 raw #发送一个原始的IPMI请求,并且打印回复信息. Lan #配置网络(lan)信道(channel) chassis #查看底盘的状态和设置电源 event #向BMC发送一个已经定 ...

  7. 读取文件之<绝对路径>与<相对路径>

    前言:字符流.字节流读取文件,下面的代码是在网上找到的一个各种文件读取方式,还算比较详细,分享给大家. public class ReadFromFile { /** * 以字节为单位读取文件,常用于 ...

  8. encodeURI() 函数概述

    encodeURI() 函数的作用是将URI中的某些特定的字符以一位到四位的转义序列来替代,这些转义序列就是这些字符的UTF-8编码(如果说某些字符是由两个代替字符构成的,该字符也只会是四位的转义序列 ...

  9. (分享)Linux服务器如何防止中木马

    大家的windows机器可能经常装一些杀毒软件或者什么的来防止中毒,然而在Linux上我们应该怎么防止这些呢? 在面试过程中我们也经常遇到该类问题,那么我们应该怎么回答才显得既有逻辑又有深度呢? 首先 ...

  10. hdu 5185(DP)

    不错的一道dp题目,一开始想了一种N*N的dp,后面就一直想怎么优化,然后就一直都在坑中了. 这题题解还是看早了,应该再多想会的,多换种表示状态的方法再想想. dp[i][j]=dp[i-j][j]+ ...