
工具/原料
电脑
WAMPServer(Window+Apache+MySQL+PHP集成开发环境,大家可以在网上下载)
方法/步骤
PDO配置。打开phpini配置文件,找到下图所示的配置信息,去掉要启用的PDO前面的“#”号即可。另外一种方式是直接在启动的wampserver中找到php扩展中的php_pdo_dblib选项,重启wampserver服务器即可。
如何利用PDO连接数据库。利用下面这条简单的语句即可连接数据库
$pdo = newPDO("mysql:host=localhost;dbname=php100","root",“ ");
其中具体参数介绍如下图所示:
PDO中常用的函数及其解释如下。
PDO::query()主要是用于有记录结果返回的 *** 作,特别是SELECT *** 作
PDO::exec()主要是针对没有结果集合返回的 *** 作,如INSERT、UPDATE等 *** 作
PDO::lastInsertId() 返回上次插入 *** 作,主键列类型是自增的最后的自增ID
PDOStatement::fetch()是用来获取一条记录
PDOStatement::fetchAll()是获取所有记录集到一个中
下面通过一个简单的php代码示例来具体介绍如何使用PDO进行数据库 *** 作。
<php
//连接数据库
$pdo = new PDO("mysql:host=localhost; dbname=member", "root","");
//在表user_list中插入数据
$pdo->exec("insert into user_list(uid, m_id, username, password) values(null,'3','testpdo','testpdo')");
//使用查询语句
$sr = $pdo->query("select from user_list");
//将查询的结果循环输出显示
while($row=$sr->fetch()){
print_r($row);
}
>
回调函数。
1.快取一行
FetchColumn是为应用程序取得一个仅包含单列的数据,代码如下:
$u = $db->query(“SELECT id FROM users WHERE login=
‘login’ AND password=‘password’”);
fetch(PDO::FETCH_COLUMN)
if ($u->fetchColumn()) { //返回一个字符串
//登录成功
} else {
//验证失败
}
>
2.取得一个标准对象
还可以将取得的一行作为一个标准类stdClass的对象实例,其中列名=属性名。
$res = $db->query(“SELECT FROM foo”);
while ($obj = $res->fetch(PDO::FETCH_OBJ)) {
// $obj == instance of stdClass
}
>
3.存取为一个类
PDO允许将结果保存为一个类,例子如下:
$res = $db->query(“SELECT FROM foo”);
$res->setFetchMode(
PDO::FETCH_CLASS,
“className”,
array(‘optional’=‘Constructor Params’)
);
while ($obj = $res->fetch()) {
// $obj == instance of className
}
>
4.从一个类取得常量
PDO允许查询的结果可以被用来生成一个目的类。
$res = $db->query(“SELECT FROM foo”);
$res->setFetchMode(
PDO::FETCH_CLASS |
PDO::FETCH_CLASSTYPE
);
while ($obj = $res->fetch()) {
// $obj == instance of class who’s name is
// found in the value of the 1st column
}
>
5.存取为一个对象
PDO还允许获取数据到一个已经存在的对象。
$u = new userObject;
$res = $db->query(“SELECT FROM users”);
$res->setFetchMode(PDO::FETCH_INTO, $u);
while ($res->fetch()) {
// 取得的记录集将放在$u这个对象变量中,在此显示
}
>
6.存取为关联数据
PDO实现了迭代器(Iteator)接口,允许一个方法实现迭代的功能。
$res = $db->query(
“SELECT FROM users”,
PDO::FETCH_ASSOC
);
foreach ($res as $row) {
// $row是一个关联数组,可以直接显示,如$row['id']
}
>
7.fetchAll()方法
PDO也提供了和ADODB类似的fetchAll()方法,它允许从一个结果集中取得数据,然后放于关联数组中。
$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
$qry = “SELECT FROM users”;
$res = $db->query($qry)->fetchAll(PDO::FETCH_ASSOC);
>
或者获取到索引数组里:
$res = $db->query("SELECT FROM foo");
$result_arr = $res->fetchAll();
print_r($result_arr);
>
数字索引数组比较浪费资源,请尽量使用关联数组,这样可以在内存中使用相当密集的大型结果集。
相关说明如下:
setAttribute()方法用于设置部分属性,主要属性有:PDO::ATTR_CASE、PDO::ATTR_ERRMODE等,这里需要设置的是PDO::ATTR_CASE,就是使用关联索引获取数据集时,关联索引是大写还是小写,有如下几个选择:
PDO::CASE_LOWER——强制列名是小写;
PDO::CASE_NATURAL——列名按照原始的方式;
PDO::CASE_UPPER——强制列名为大写。
我们使用setFetchMode方法来设置获取结果集的返回值的数据类型,类型有:
PDO::FETCH_ASSOC——关联数组形式;
PDO::FETCH_NUM——数字索引数组形式;
PDO::FETCH_BOTH——两种数组形式都有,这是默认的;
PDO::FETCH_OBJ——按照对象的形式,类似于以前的 mysql_fetch_object()。
当然,一般情况下,我们使用PDO::FETCH_ASSOC取得关联数组。具体使用哪种类型,应按照自己的实际应用选择。
8.fetchColumn()方法
如果想获取指定记录里的一个字段结果,则可以使用PDOStatement::fetchColumn()。
$rs = $db->query("SELECT COUNT() FROM foo");
$col = $rs->fetchColumn();
echo $col;
>
一般使用fetchColumn()方法进行count统计,对某些只需要单字段的记录可以很好地 *** 作。
9.回调函数
PDO还规定在每一个fetch模式下,经过处理后的结果中使用一个回调函数。
function draw_message($subject,$email) { … }
$res = $db->query(“SELECT FROM msg”);
$res->fetchAll(PDO::FETCH_FUNC,“draw_message”);
>
10.直接查询的问题
直接使用Query查询行每次都会直接提交给数据库,如果查询较多,每次频频查询将导致效率降低。
另外,在安全问题上,没有过滤一些特殊字符容易产生SQL注入。
11.过滤字符
下面我们来看看如何使用PDO进行过滤引起SQL注入的方法,即过滤特殊字符。我们在PDO中使用quote()方法,使用例子如下:
$query = “SELECT FROM users WHERE
login=“$db->quote($_POST[‘login’])”
AND
passwd=“$db->quote($_POST[‘pass’]);
12.事务处理
PDO驱动程序支持所有的事务数据库,并且PDO提供更简便的方法,如下:
$db->beginTransaction();
if ($db->exec($qry) === FALSE) {
$db->rollback();
}
$db->commit();
>
13.执行一个批处理事务
在下面的示例中,假设我们为一个新雇员创建一组条目,这个雇员有一个ID号,即23。除了输入这个雇员的基本数据外,还需要记录雇员的薪水。分别完成两个更新很简单,但通过将这两个更新包括在beginTransaction()和commit()调用中,就可以保证在更改完成之前,其他人无法看到更改。如果发生了错误,catch块可以回滚事务开始以来发生的所有更改,并打印出一条错误消息。代码内容如下:
try {
$dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2',
array(PDO_ATTR_PERSISTENT => true));
echo "Connected\n";
$dbh->setAttribute(PDO_ATTR_ERRMODE, PDO_ERRMODE_EXCEPTION);
$dbh->beginTransaction();
$dbh->exec("insert into staff (id, first, last)
values (23, 'Joe', 'Bloggs')");
$dbh->exec("insert into salarychange (id, amount, changedate)
values (23, 50000, NOW())");
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
echo "Failed: " $e->getMessage();
}
>
<php
header('content-type:text/html;charset=utf-8');
$dsn = 'mysql:dbname=m-test;host=localhost';
$user = 'root';//数据库用户名
$passwd = '';//数据库密码
try {
$pdo = new pdo($dsn, $user, $passwd);
$pdo->query('set names utf8');//设置字符集
$result = $pdo->query('select from user');//查询数据库
foreach ($result as $row) {
echo $row['id'];//输出 id 号
echo ':';
echo $row['name'];//输出 name
echo '<br />';
}
} catch (pdoexception $e) {
echo $e->getmessage();//错误信息
}
>
过程数据表示可以随时间变化的数据,例如节点控制器的输入(即传感器)和输出(即电动机驱动器)。过程数据也存储在对象字典中。但是,由于SDO通信一次仅允许访问一个对象字典索引,因此访问不断变化的数据可能会有很多开销。另外,CANopen协议要求节点必须能够发送自己的数据,而无需被CANopen主站轮询。因此,使用一种称为“ 过程数据对象”(PDO)的通信方法来传输过程数据的方法也有所不同。了解更多 CANopen总线协议
PDO有两种类型:传输PDO(TPDO)和接收PDO(RPDO)。TPDO是来自节点(已产生)的数据,而RPDO是到达节点(已消耗)的数据。另外,PDO有两种类型的参数:配置参数和映射参数。对象词典中保留给PDO配置和映射信息的部分是索引1400h-1BFFh。
配置参数指定COB-ID,传输类型,禁止时间(仅TPDO)和事件计时器,这将在本节中进行说明。有多种方法可以启动PDO传输。这些方法包括事件驱动,时间驱动,单独轮询和同步轮询。传输类型在PDO的配置参数中指定。在事件驱动的传输中,当其中的过程数据发生更改时,将启动PDO传输。在时间驱动的传输中,PDO传输以固定的时间间隔发生。在单个轮询中,PDO传输是使用一种不常用的称为远程请求的机制启动的。在同步轮询中,使用SYNC信号启动PDO传输。同步信号经常用作全局计时器。例如,如果CANopen主站发出SYNC消息,则可以配置多个节点以查看并响应该SYNC。这样,主站就可以同时获取多个过程对象的“快照”。
事件驱动的PDO传输示例
映射参数指定由单个PDO消息发送的对象字典值。例如,单个PDO消息可能包含来自对象索引2001h,2003h和2005h的数据。
TPDO对象字典示例
mysql返回修改后的列_PDO Mysql驱动返回结果的列类型问题
PDO的Mysql驱动返回的结果中,所有的字段都是字符串,
使用statement->getColumnMeta得到的列元信息,其中的pdo_type也表明是字符串。
php可以自动处理类型转换,比如整型和字符串,但是对于其他环境,比如传给其他平台(如flash),就要在其中一端进行类型转换,或者在协议中处理。另外,要基于查询结果的元信息构建自动化的数据处理,比如ORM,也就不方便了。
原因是,mysql驱动使用mysql_fetch_row函数取得结果集,它是个字符串数组,即所有列都是字符串方式的存储,并且没根据DB存储的类型进行转换,相应地,列的元数据也就都是字符串类型了;
另外,pdo本身的数据类型也有限,跟DB、DB客户端库函数的数据类型有差异,比如pdo没有浮点数类型。
根据pdo接口规范,只要修改mysql驱动中的两个回调函数就可以了:
PHP 版本 <= 52 的常用连接方法为
$link = mysql_connect('mysql地址/localhost','root','root密码');mysql_select_db('db1'); //选择一个数据库
mysql_query('set names utf8'); // 设置下数据库默认编码,避免写入/读取乱码
$res = mysql_query('select from user'); // 执行sql 语句
$rows = array();
while($row = mysql_fetch_array($res)){
$rows[] = $row; // 循环 resouce 数据得到数组数据集合
}
print_r($rows); // 最后一步输出数据列表
PHP 版本 >= 53 的常用连接方法为PDO形式,当然也可以使用52的连接方法。(PDO需开启 php_pdo_mysql 扩展)
$pdo = new PDO('mysql:host=地址/localhost;dbname=数据库名','root','root密码');$pdo->exec('set names utf8');
$res = $pdo->query('select from user');
$rows = array();
while($row = $res->fetch()){
$rows[] = $row;
}
print_r($rows);
大家学习php途中,建议使用53 版本以上以获得更好的php编程体验。
所以推荐pdo形式连接数据库,更安全快速。
以上就是关于如何用pdo读取数据生成静态页面全部的内容,包括:如何用pdo读取数据生成静态页面、php如何获得 pdo 查询结果 列名、php 使用pdo链接数据库 怎么查询数据库中的内容。查询出来之后要怎么显示指定的内容。例如,id号,或者na等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)