>  기사  >  백엔드 개발  >  PHP를 mysql-mysqli 및 PDO에 연결하는 방법

PHP를 mysql-mysqli 및 PDO에 연결하는 방법

不言
不言원래의
2018-04-09 17:11:433252검색

이 글의 내용은 PHP를 mysql-mysqli와 PDO에 연결하는 방법을 공유하는 것입니다. 도움이 필요한 친구들이 참고하면 됩니다.

읽을 때 데이터베이스에 연결하기 위한 PDO 확장을 언급했습니다. 그리고 mysqli 확장인 PDO는 기본적으로 쓸모가 없어서 일부 정보를 확인하고 특별히 기록해서 다시 찍어봤습니다.

PHP의 MySQL 확장(장점과 단점)

PHP 애플리케이션이 MySQL 데이터베이스 확장과 상호 작용할 수 있도록 허용한 초기 설계 및 개발. mysql 확장은 절차 지향 인터페이스를 제공하며

MySQL 4.1.3 이하 버전용으로 설계되었습니다. 따라서 이 확장은 MySQL 4.1.3 또는 최신 데이터베이스 서버와 상호 작용할 수 있지만 이후 MySQL 서버에서 제공되는 일부 기능은 지원하지 않습니다.

PHP용 mysqli 확장

mysqli 확장은 MySQL 4.1.3 이상 버전의 새로운 고급 기능을 사용하는 데 사용할 수 있습니다.

mysqli 확장은 PHP 5 이상 버전에 포함되어 있습니다.

mysqli 확장에는 mysql 확장과 비교하여 주요 개선 사항이 있습니다: 객체 지향 인터페이스, 준비된 명령문 지원, 다중 명령문 실행 지원, 트랜잭션 지원, 향상된 디버깅 기능 및 임베디드 서비스 지원.

PHP 데이터 개체(PDO)

PHP 데이터 개체는 PHP 애플리케이션의 데이터베이스 추상화 계층 사양입니다. PDO는 PHP 애플리케이션이 연결될 특정 데이터베이스 서버 시스템 유형에 신경 쓰지 않도록 통합 API 인터페이스를 제공합니다. 즉, PDO의 API를 사용하면 필요할 때마다 데이터베이스 서버를 원활하게 전환할 수 있습니다.

**************************************************** ************************************************** * *******************************

PHP-MySQL은 MySQL 데이터베이스를 운영하는 PHP용 가장 독창적인 확장입니다. PHP-MySQLi i는 Improvement(개선)를 의미하며


는 상대적으로 고급 기능을 제공하며 Extension에 관한 한 보안도 강화합니다.

그리고 PDO(PHP 데이터 개체)는 데이터베이스를 운영하기 위한 추상화 계층을 제공합니다


1.mysql 및 mysqli

mysqli는 php5에서 제공하는 새로운 함수 라이브러리로, (i) 개선을 나타내며 실행 속도도 더 빠릅니다. 물론 더 안전합니다.

mysql은 비영구적 연결입니다. 함수와 mysqli는 영구 연결 함수입니다. 즉,

mysql은 연결될 때마다 연결 프로세스를 열고 mysqli는 mysqli를 여러 번 실행할 때 동일한 연결 프로세스를 사용하므로 서버 오버헤드를 줄이는 친구도 있습니다. new mysqli('localhost', usenamer' , 'password', 'databasename'); 항상

오류를 보고합니다. 치명적인 오류: 'mysqli' 클래스가 d:...

PHP에 내장되어 있지 않습니까?

win에서는 php.ini를 변경하고 php_mysqli.dll 앞의 ";"을 제거해야 합니다. Linux에서는 mysqli를 컴파일해야 합니다.

1: Mysqli.dll을 사용하면 데이터베이스를 개체나 프로세스에서 작동할 수 있으며, 사용 방법도 매우 쉽습니다. PHP가 MySQL 데이터베이스에 연결하는 가장 전형적인 방법은 MySQL_Connect ()를 사용하는 것입니다. ]

일반 보기

copy

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 이며, 목적은 mysql 데이터베이스에서 PHP의 작업을 단순화하는 것입니다 .

mysqli

Mysqli는 PHP 5 이상 버전에 등장한 mysql의 향상된 버전입니다. 주로 다음과 같은 측면에서 mysql보다 향상되었습니다.

        1、面向对象接口;2、prepared语句支持(译注:关于prepare请参阅mysql相关文档);3、多语句执行支持;4、事务支持;5、增强的调试能力;6、嵌入式服务支持



[php] view plain copy


<?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()函数的用法上的小区别。




[php] view plain copy


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

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



[php] view plain copy


  1. <?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] view plain copy


<?php  
$pdo = new PDO(&#39;pgsql:host=192.168.1.111;port=5432;dbname=anydb&#39;, &#39;anyuser&#39;, &#39;pw&#39;);//连接到数据库  
sleep(5);  
$stmt = $pdo->prepare(&#39;SELECT * FROM sometable&#39;);  
$stmt->execute();  
$pdo = null;//关闭连接  
?>


         由于从PHP 6 开始要完全使用PDO方式而非其他方式连接数据库,所以接下来详细研究一番:

1、为什么要用PDO,用PDO有什么好处?


PDO(PHP 데이터 개체)는 PHP가 데이터베이스에 액세스하기 위한 경량 통합 인터페이스입니다. 이는 데이터 액세스 추상화 계층을 제공합니다. 즉, 어떤 데이터베이스에 관계없이 동일한 방법을 사용하여 쿼리하거나 읽을 수 있습니다. PDO 자체는 데이터베이스 기능을 구현할 수 없으며, 데이터베이스 서비스에 액세스하려면 특정 데이터베이스에 대한 PDO 드라이버 를 사용해야 합니다.

2. PDO를 사용하는 방법은 무엇입니까?

여기서 PHP의 황금 파트너인 mysql을 예로 들어 보겠습니다.

PDO_MYSQL: PDO_MYSQL은 my SQL 연결을 완료할 수 있는 PDO 인터페이스입니다. 데이터베이스 드라이버(참고: mysql 3.x 이상에서 사용됨).

설치: php.ini 파일을 열면 다음 코드를 찾을 수 있습니다. 여기에서 mysql 드라이버가 기본적으로 켜져 있음을 확인할 수 있습니다(앞에 주석에 세미콜론이 없습니다). 다른 데이터베이스에 연결해야 하고, 다른 데이터베이스용 드라이버를 직접 추가해야 합니다(해당 항목 앞의 세미콜론을 제거하고 누락된 항목을 추가하세요). [php] 일반보기

복사



  1. //各数据库的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基类的实例创建连接。



[php] view plain copy


//连接到数据库  
$db = new PDO(&#39;mysql:host=localhost;dbname=test&#39;, $user, $pass);



[php] view plain copy


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




[php] view plain copy


//关闭连接  
$db = null;

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



[php] view plain copy


  1. <?php  
        $dbms=&#39;mysql&#39;;       //数据库 mysql  
        $host=&#39;localhost&#39;;   //数据库主机名  
        $dbName=&#39;test&#39;;      //数据库名  
        $user=&#39;root&#39;;        //连接用户名  
        $pass=&#39;&#39;;            //密码  
        $dsn="$dbms:host=$host;dbname=$dbName";  
        classdbextendsPDO{  
           publicfunction__construct(){  
                try{  
                    parent::__construct("$GLOBALS[dsn]",$GLOBALS[&#39;user&#39;],$GLOBALS[&#39;pass&#39;]);  
                 }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(&#39;select * from table_name&#39;) as $row){  
           print_r($row);  
        }  
        $db->exec(&#39;delete from table_name where id=11&#39;);  
    ?>

3、更多的PDO方法:



[php] view plain copy


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 — 设置属性




[php] view plain copy


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 — 为语句设置默认的获取模式。

  




[php] view plain copy


Exception::getMessage — 获取异常消息内容。  
Exception::getPrevious — 返回异常链中的前一个异常  
Exception::getCode — 获取异常代码  
Exception::getFile — 获取发生异常的程序文件名称  
Exception::getLine — 获取发生异常的代码在文件中的行号  
Exception::getTrace — 获取异常追踪信息  
Exception::getTraceAsString — 获取字符串类型的异常追踪信息  
Exception::toString — 将异常对象转换为字符串  
Exception::clone — 异常克隆

本文转自:https://blog.csdn.net/llittlepig/article/details/38272769

위 내용은 PHP를 mysql-mysqli 및 PDO에 연결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.