ホームページ >バックエンド開発 >PHPチュートリアル >PHP を mysql-mysqli および PDO に接続する方法

PHP を mysql-mysqli および PDO に接続する方法

不言
不言オリジナル
2018-04-09 17:11:433358ブラウズ

この記事の内容は、PHP を mysql-mysqli および PDO に接続する方法を共有することです。必要な友人はそれを参照してください。

読んでいるときに、データベースに接続するための PDO 拡張機能について言及しました。以前から mysql 拡張機能を使っていて、mysqli 拡張機能、PDO は基本的に役に立たないので、いくつかの情報を確認し、特別に記録して再掲しました、

PHP の MySQL 拡張機能 (メリットとデメリット)

PHP アプリケーションが MySQL データベース拡張機能と対話できるようにする設計と開発の初期の段階。 mysql 拡張機能はプロシージャ指向のインターフェイス

を提供し、MySQL 4.1.3 以前向けに設計されています。したがって、この拡張機能は MySQL 4.1.3 以降のデータベース サーバーと対話できますが、それ以降の MySQL サーバーが提供する一部の機能はサポートしません。 PHP 用の

mysqli 拡張機能

mysqli 拡張機能 (MySQL 拡張拡張機能と呼ばれることもあります) は、MySQL 4.1.3 以降の新しい高度な機能を使用するために使用できます。

mysqli 拡張機能は、PHP 5 以降のバージョンに含まれています。

mysqli 拡張機能には、mysql 拡張機能と比較して、主な改善点として、オブジェクト指向インターフェイス、プリペアド ステートメントのサポート、複数ステートメントの実行サポート、トランザクション サポート、強化されたデバッグ機能、および組み込みサービスのサポートがあります。

PHP データ オブジェクト (PDO)

PHP データ オブジェクトは、PHP アプリケーションのデータベース抽象化レイヤー仕様です。 PDO は統合された API インターフェイスを提供するため、PHP アプリケーションは接続する特定のデータベース サーバー システム タイプを気にしません。つまり、PDO の API を使用すれば、必要なときにいつでもデータベース サーバーをシームレスに切り替えることができます。

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

PHP-MySQL は、PHP が MySQL データベースを操作するための最も独創的な拡張機能です。 PHP-MySQLi i は Improvement の略で、

は比較的高度な機能を提供し、Extension に関する限り、セキュリティも向上します。

そして PDO (PHP Data Object) はデータベースを操作するための抽象化レイヤーを提供します


1.mysqlとmysqli

mysqliはphp5で提供される新しい関数ライブラリで、(i)は改良を表しており、もちろん実行速度も速くなります

mysqlは非永続接続です。関数であり、mysqli は永続接続関数です。つまり、

mysql は接続されるたびに接続プロセスを開き、mysqli は複数回実行するときに同じ接続プロセスを使用するため、サーバーのオーバーヘッドが軽減されます。 new mysqli('localhost', usenamer' を使用する友人もいます)。プログラミング時、 'password', 'databasename'); 常に

エラー、致命的エラー: Class 'mysqli' not found in d:...

mysqli クラスは PHP に組み込まれているのではありませんか?

Win では、php.ini を変更し、php_mysqli.dll の前の「;」を削除する必要があります。Linux では、mysqli をコンパイルする必要があります。

1: Mysqli.dll を使用すると、データベースをオブジェクトまたはプロセス内で操作でき、その使用も非常に簡単です。


PHP が mysql データベースに接続する最も古典的な方法は、mysql_connect() を使用することです。具体的なコードは次のとおりです。 [php ] プレーンを見る

コピー



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 Data Object) は、PHP がデータベースにアクセスするための軽量の統合インターフェイスです。これはデータ アクセス抽象化レイヤーを提供します。つまり、どのデータベースであっても、同じメソッドを使用してクエリや読み取りを行うことができます。 PDO 自体はデータベース関数を実装できませんが、データベース サービスにアクセスするには、特定のデータベース用の PDO ドライバー を使用する必要があることに注意してください。

2. PDOの使い方は?

ここでは、PHP のゴールデンパートナー mysql を例として取り上げます:

PDO_MYSQL: PDO_MYSQL は SQL への接続を完了できる PDO インターフェイスですデータベースドライバー (注: のみ) mysql 3.x 以降で使用されます)。

インストール: php.ini ファイルを開くと、次のコードが表示されます (先頭にコメントのセミコロンがありません)。他のデータベースに接続する必要がある場合は、他のデータベースのドライバーを自分で追加します (対応する項目の前のセミコロンを削除し、存在しないものを追加します)。 [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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。