Maison  >  Article  >  développement back-end  >  Comment connecter PHP à mysql-mysqli et PDO

Comment connecter PHP à mysql-mysqli et PDO

不言
不言original
2018-04-09 17:11:433304parcourir

Le contenu de cet article est de partager avec vous la méthode de connexion de PHP à mysql-mysqli et PDO Les amis dans le besoin peuvent s'y référer

L'extension PDO a été mentionnée lorsque. lecture du livre Pour me connecter à la base de données, j'ai déjà utilisé l'extension mysql et l'extension mysqli, mais fondamentalement aucune utilisation de PDO, j'ai donc vérifié certaines informations et les ai spécialement enregistrées et reproduites,

Extensions MySQL pour PHP (avantages et inconvénients)

Concevoir et développer les premières extensions qui permettent aux applications PHP d'interagir avec les bases de données MySQL. L'extension mysql fournit une interface orientée procédure ;

et est conçue pour MySQL 4.1.3 ou version antérieure. Par conséquent, bien que cette extension puisse interagir avec les serveurs de base de données MySQL 4.1.3 ou plus récents, elle ne prend pas en charge certaines fonctionnalités fournies par les serveurs MySQL ultérieurs.

Extension MySQLi pour PHP

L'extension MySQLi, que nous appelons parfois extension améliorée MySQL, peut être utilisée pour utiliser les nouvelles fonctionnalités avancées de MySQL 4.1.3 ou des versions plus récentes

L'extension mysqli est incluse dans PHP 5 et versions ultérieures ;

L'extension mysqli présente une série d'avantages par rapport à l'extension mysql, les principales améliorations sont : interface orientée objet, prise en charge des instructions préparées, multi-. prise en charge de l'exécution des instructions, prise en charge des transactions, améliorations des capacités de débogage et prise en charge des services intégrés.

PHP Data Object (PDO)

PHP Data Object est une spécification de couche d'abstraction de base de données dans les applications PHP. PDO fournit une interface API unifiée afin que votre application PHP ne se soucie pas du type de système de serveur de base de données spécifique à connecter. En d'autres termes, si vous utilisez l'API de PDO, vous pouvez changer de serveur de base de données de manière transparente à tout moment.

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

PHP-MySQL est le manière la plus originale pour PHP de faire fonctionner l'extension de base de données MySQL, le i dans PHP-MySQLi signifie Amélioration,

fournit des fonctions relativement avancées, et en ce qui concerne l'extension, il augmente également la sécurité.

Et PDO (PHP Data Object) fournit une couche d'abstraction pour faire fonctionner la base de données


1.mysql et mysqli

mysqli est une nouvelle bibliothèque de fonctions fournie par php5, (i) représente une amélioration, et sa vitesse d'exécution est bien sûr plus rapide. est également plus sûr

mysql est une fonction de connexion non persistante et mysqli est une fonction de connexion permanente. C'est-à-dire

mysql ouvrira un processus de connexion à chaque fois qu'il est connecté, et exécuter mysqli plusieurs fois utilisera le même processus de connexion, réduisant ainsi la surcharge du serveur. Certains amis utilisent new mysqli('localhost lors de la programmation. ', usenamer', 'password', 'databasename'); signale toujours

erreur, erreur fatale : la classe 'mysqli' est introuvable dans d:…

la classe mysqli n'est pas incluse avec PHP De?

n'est pas activé par défaut. Vous devez modifier le php.ini sous win et supprimer le ";" devant php_mysqli.dll qui doit y être compilé sous Linux.

1 : Mysqli.dll est une base de données qui permet d'exploiter la base de données dans un objet ou un processus, et son utilisation est également très simple.


php se connecte à la base de données mysql Notre méthode la plus classique consiste à utiliser mysql_connect(). , le code spécifique est le suivant :



[php] view plain copie


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



Invite du navigateur : Cette extension est obsolète depuis PHP 5.5.0 , et sera supprimé à l'avenir. Il doit être remplacé par l'extension MySQLi ou PDO_MySQL. Ainsi, après recherche, j'ai trouvé la source de l'article suivant.

Ici le mysql est un L'API étendue est conçue pour simplifier les opérations de PHP sur la base de données mysql.

mysqli

mysqli est une version améliorée de mysql, apparaissant dans PHP 5 et versions ultérieures. Il est principalement amélioré par rapport à MySQL dans les aspects suivants :

        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 Data Object) est une interface unifiée légère permettant à PHP d'accéder à la base de données. Il fournit une couche d'abstraction d'accès aux données, ce qui signifie que quelle que soit la base de données, la même méthode peut être utilisée pour interroger ou lire. Il convient de noter que PDO lui-même ne peut implémenter aucune fonction de base de données, mais doit utiliser un pilote PDO d'une base de données spécifique pour accéder aux services de base de données.

2. Comment utiliser l'AOP ?

Nous prenons ici comme exemple le partenaire en or de PHP, mysql :

PDO_MYSQL : PDO_MYSQL est le pilote de l'interface PDO qui peut compléter la connexion à la base de données mysql (remarque : utilisé uniquement pour mysql 3.x ou supérieur) .

Installation : Ouvrez le fichier php.ini et vous pouvez trouver le code suivant Ici, vous pouvez voir que le pilote mysql est activé. activé par défaut (non affiché devant) Point-virgule utilisé pour les commentaires), si vous devez vous connecter à d'autres bases de données, ajoutez vous-même des pilotes pour d'autres bases de données (supprimez le point-virgule devant l'élément correspondant, et ajoutez s'il n'y en a pas).





[php] voir en clair copie


  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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn