实验目的
mysqli语句切换到pdo语句
注意php5.6间相近版本可以mysqli和pdo混用,php7之后抛弃了mysqli,只有pdo
调用数据库有一个基本的检查,即,数据库是否打开,然后才有query语句,
$dbh=new PDO("mysql:host=".$DB_HOST.';dbname='.$DB_NAME, $DB_USER, $DB_PASS,array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"));
在这样的语句中,我多次想检查$dbh的返回值,用echo就停止,后来换成print_r 语句输出 成PDO Object ( ) ,同时也发现只有if语句如if(!$dbh)等类似的用法,
print_r语句很好,可以打印任何类型的数据,即使不能打印也会用友好的方式告诉你结果。echo直接错误退出了。
global $DB_HOST,$DB_NAME,$DB_USER,$DB_PASS,$dbh; global的用法颠覆了我的全局变量定义的理解,神奇,她帮着我检验了mysqli和pdo的必须变量的关系。
require_once的操作不是太理解,包含进来文件后,执行就结束了,比如变量就变成了无关的,echo都是空值,global后才会出现原值。
这样处理连接更好
<?php
try {
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
foreach($dbh->query('SELECT * from FOO') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
这样关闭
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
// 在此使用连接
// 现在运行完成,在此关闭连接
$dbh = null;
?>
持久化连接,一般不建议
<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
PDO::ATTR_PERSISTENT => true
));
?>
至此,基本可以把mysqli用pdo互换,等有空研究吧
参考 https://www.runoob.com/php/php-pdo.html
http://php.net/manual/zh/book.pdo.php