
PDO(PHP Data Objects)是一种在PHP里连接数据库的使用接口。PDO与mysqli曾经被建议用来取代原本PHP在用的mysql相关函数,基于数据库使用的安全性,因为后者欠缺对于SQL注入的防护。
mysql返回修改后的列_PDO Mysql驱动返回结果的列类型问题使用statement->getColumnMeta得到的列元信息,其中的pdo_type也表明是字符串。
php可以自动处理类型转换,比如整型和字符串,但是对于其他环境,比如传给其他平台(如flash),就要在其中一端进行类型转换,或者在协议中处理。另外,要基于查询结果的元信息构建自动化的数据处理,比如ORM,也就不方便了。
原因是,mysql驱动使用mysql_fetch_row函数取得结果集,它是个字符串数组,即所有列都是字符串方式的存储,并且没根据DB存储的类型进行转换,相应地,列的元数据也就都是字符串类型了;
另外,pdo本身的数据类型也有限,跟DB、DB客户端库函数的数据类型有差异,比如pdo没有浮点数类型。
根据pdo接口规范,只要修改mysql驱动中的两个回调函数就可以了:
PHP-MySQL PHP *** 作 MySQL 资料库原始 Extension PHP-MySQLi i 代表 Improvement 提更相进阶功能 Extension 言本身增加安全性 PDO (PHP Data Object) 则提供 Abstraction Layer *** 作资料库用讲其实看麽差别所直接看程式吧…首先先看段用 PHP-MySQL 写程式码类范例用世界各:
复制代码代码:
mysql_connect($db_host, $db_user, $db_password)
mysql_select_db($dn_name)
$result = mysql_query("SELECT `name` FROM `users` WHERE `location` = '$location'")
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
echo $row['name']
}
mysql_free_result($result)
?>
乍看没麽问题其实背些问…
种式能 Bind Column 前例 SQL 叙述说$location 容易 SQL Injection于发展 mysql_escape_string() (备注:5.3.0弃用) 及 mysql_real_escape_string() 解决问题麽搞整叙述变复杂且丑陋且栏位想见情形…
复制代码代码:
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password))
mysql_query($query)
?>
PHP-MySQLi 少进步除透 Bind Column 解决述问题且援 Transaction, Multi Query 并且同提供 Object oriented style (面段 PHP-MySQLi 范例写) Procedural style (面 PHP-MySQL 范例写)两种写…等等
复制代码代码:
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)