使用statement->getColumnMeta得到的列元信息,其中的pdo_type也表明是字符串。
php可以自动处理类型转换,比如整型和字符串,但是对于其他环境,比如传给其他平台(如flash),就要在其中一端进行类型转换,或者在协议中处理。另外,要基于查询结果的元信息构建自动化的数据处理,比如ORM,也就不方便了。
原因是,mysql驱动使用mysql_fetch_row函数取得结果集,它是个字符串数组,即所有列都是字符串方式的存储,并且没根据DB存储的类型进行转换,相应地,列的元数据也就都是字符串类型了;
另外,pdo本身的数据类型也有限,跟DB、DB客户端库函数的数据类型有差异,比如pdo没有浮点数类型。
根据pdo接口规范,只要修改mysql驱动中的两个回调函数就可以了:
//连接、查询try {
$dbh = new PDO('mysql:host=localhostdbname=test', $user, $pass)
foreach($dbh->query('SELECT * from FOO') as $row) {
print_r($row)
}
$dbh = null//释放资源
} catch (PDOException $e) {
print "错误!: " . $e->getMessage() . "<br></br>"
die()
}
//执行删除 *** 作,插入、修改与此类似,更改SQL语句即可
$count = $dbh->exec("DELETE FROM fruit WHERE colour = 'red'")
本文实例讲述了php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率。分享给大家供大家参考,具体如下:<?php
/**
*
测试pdo和mysqli的执行效率
*/
header("Content-type:text/htmlcharset=utf-8")
//通过pdo链接数据库
$pdo_startTime
=
microtime(true)
$pdo
=
new
PDO("mysql:host=localhostdbname=test","root","1234",array(PDO::MYSQL_ATTR_INIT_COMMAND
=>
"SET
NAMES'utf8'"))
for($i=1$i<=100$i++){
$title
=
"pdo标题".$i
$content
=
"pdo内容".$i
$addtime
=
time()
$user_id
=
$i
$pdo_sql
=
"INSERT
INTO
`article`(`title`,`content`,`addtime`,`user_id`)
VALUES(:title,:content,:addtime,:user_id)"
$sth
=
$pdo->prepare($pdo_sql)
$sth->bindParam(':title',$title)
$sth->bindParam(':content',$content)
$sth->bindParam(':addtime',$addtime)
$sth->bindParam(':user_id',$user_id)
$sth->execute()
}
$pdo_endTime
=
microtime(true)
$pdo_time
=
$pdo_endTime
-
$pdo_startTime
echo
$pdo_time
echo
"<hr/>"
//通过mysql链接数据库
$mysqli_startTime
=
microtime(true)
$mysqli
=
mysqli_connect("localhost","root","1234","test")
or
die("数据连接失败")
mysqli_query($mysqli,"set
names
utf8")
for($i=1$i<=100$i++){
$title
=
"mysqli标题".$i
$content
=
"mysqli内容".$i
$addtime
=
time()
$user_id
=
$i
$sql
=
"INSERT
INTO
`article`(`title`,`content`,`addtime`,`user_id`)
VALUES('".$title."','".$content."',".$addtime.",".$user_id.")"
mysqli_query($mysqli,$sql)
}
$mysqli_endTime
=
microtime(true)
$mysqli_time
=
$mysqli_endTime
-
$mysqli_startTime
echo
$mysqli_time
echo
"<hr/>"
if($pdo_time
>
$mysqli_time){
echo
"pdo的执行时间是mysqli的".round($pdo_time/$mysqli_time)."倍"
}else{
echo
"mysqli的执行时间是pdo的".round($mysqli_time/$pdo_time)."倍"
}
测试结果:其实经过多次测试,pdo和mysqli的执行效率差不多。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP基于pdo *** 作数据库技巧总结》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库 *** 作入门教程》及《php常见数据库 *** 作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
您可能感兴趣的文章:php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例php中数据库连接方式pdo和mysqli对比分析php中关于mysqli和mysql区别的一些知识点分析php *** 作mysqli(示例代码)php封装的mysqli类完整实例PHP以mysqli方式连接类完整代码实例php简单解析mysqli查询结果的方法(2种方法)php中mysql连接方式PDO使用详解Php中用PDO查询Mysql来避免SQL注入风险的方法php
mysql
PDO
查询 *** 作的实例详解PHP实现PDO的mysql数据库 *** 作类
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)