如何用pdo读取数据生成静态页面

如何用pdo读取数据生成静态页面,第1张

工具/原料

电脑

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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9489704.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存