$qiandao["qiandao"]=$qiandao["qiandao"]-DBSQL("select?*?from?user?where?=?'$name'?");
為北塔等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及北塔網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、北塔網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
多命名幾個(gè)變量,你這樣 `$qiandao["qiandao"]`? 用在不同的類型中,容易搞混。
$db?=?new?Database();?
$result?=?$db-DBSQL("select?*?from?user?where?=?'$name'?limit?1?");
這里的 $result 應(yīng)該是個(gè)數(shù)組。
if($result['qiandao']?==?1){
//
}else{
//
}
?php
header('content-type:text/html;charset=utf-8');
$dsn = 'mysql:dbname=m-test;host=localhost';
$user = 'root';//數(shù)據(jù)庫用戶名
$passwd = '';//數(shù)據(jù)庫密碼
try {
$pdo = new pdo($dsn, $user, $passwd);
$pdo-query('set names utf8');//設(shè)置字符集
$result = $pdo-query('select * from user');//查詢數(shù)據(jù)庫
foreach ($result as $row) {
echo $row['id'];//輸出 id 號(hào)
echo ':';
echo $row['name'];//輸出 name
echo 'br /';
}
} catch (pdoexception $e) {
echo $e-getmessage();//錯(cuò)誤信息
}
?
回調(diào)函數(shù)。
1.快取一行
FetchColumn是為應(yīng)用程序取得一個(gè)僅包含單列的數(shù)據(jù),代碼如下:
$u = $db-query(“SELECT id FROM users WHERE login=
‘login’ AND password=‘password’”);
fetch(PDO::FETCH_COLUMN)
if ($u-fetchColumn()) { //返回一個(gè)字符串
//登錄成功
} else {
//驗(yàn)證失敗
}
?
2.取得一個(gè)標(biāo)準(zhǔn)對(duì)象
還可以將取得的一行作為一個(gè)標(biāo)準(zhǔn)類stdClass的對(duì)象實(shí)例,其中列名=屬性名。
$res = $db-query(“SELECT * FROM foo”);
while ($obj = $res-fetch(PDO::FETCH_OBJ)) {
// $obj == instance of stdClass
}
?
3.存取為一個(gè)類
PDO允許將結(jié)果保存為一個(gè)類,例子如下:
$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.從一個(gè)類取得常量
PDO允許查詢的結(jié)果可以被用來生成一個(gè)目的類。
$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.存取為一個(gè)對(duì)象
PDO還允許獲取數(shù)據(jù)到一個(gè)已經(jīng)存在的對(duì)象。
$u = new userObject;
$res = $db-query(“SELECT * FROM users”);
$res-setFetchMode(PDO::FETCH_INTO, $u);
while ($res-fetch()) {
// 取得的記錄集將放在$u這個(gè)對(duì)象變量中,在此顯示
}
?
6.存取為關(guān)聯(lián)數(shù)據(jù)
PDO實(shí)現(xiàn)了迭代器(Iteator)接口,允許一個(gè)方法實(shí)現(xiàn)迭代的功能。
$res = $db-query(
“SELECT * FROM users”,
PDO::FETCH_ASSOC
);
foreach ($res as $row) {
// $row是一個(gè)關(guān)聯(lián)數(shù)組,可以直接顯示,如$row['id']
}
?
7.fetchAll()方法
PDO也提供了和ADODB類似的fetchAll()方法,它允許從一個(gè)結(jié)果集中取得數(shù)據(jù),然后放于關(guān)聯(lián)數(shù)組中。
$db-setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
$qry = “SELECT * FROM users”;
$res = $db-query($qry)-fetchAll(PDO::FETCH_ASSOC);
?
或者獲取到索引數(shù)組里:
$res = $db-query("SELECT * FROM foo");
$result_arr = $res-fetchAll();
print_r($result_arr);
?
數(shù)字索引數(shù)組比較浪費(fèi)資源,請(qǐng)盡量使用關(guān)聯(lián)數(shù)組,這樣可以在內(nèi)存中使用相當(dāng)密集的大型結(jié)果集。
相關(guān)說明如下:
setAttribute()方法用于設(shè)置部分屬性,主要屬性有:PDO::ATTR_CASE、PDO::ATTR_ERRMODE等,這里需要設(shè)置的是PDO::ATTR_CASE,就是使用關(guān)聯(lián)索引獲取數(shù)據(jù)集時(shí),關(guān)聯(lián)索引是大寫還是小寫,有如下幾個(gè)選擇:
PDO::CASE_LOWER——強(qiáng)制列名是小寫;
PDO::CASE_NATURAL——列名按照原始的方式;
PDO::CASE_UPPER——強(qiáng)制列名為大寫。
我們使用setFetchMode方法來設(shè)置獲取結(jié)果集的返回值的數(shù)據(jù)類型,類型有:
PDO::FETCH_ASSOC——關(guān)聯(lián)數(shù)組形式;
PDO::FETCH_NUM——數(shù)字索引數(shù)組形式;
PDO::FETCH_BOTH——兩種數(shù)組形式都有,這是默認(rèn)的;
PDO::FETCH_OBJ——按照對(duì)象的形式,類似于以前的 mysql_fetch_object()。
當(dāng)然,一般情況下,我們使用PDO::FETCH_ASSOC取得關(guān)聯(lián)數(shù)組。具體使用哪種類型,應(yīng)按照自己的實(shí)際應(yīng)用選擇。
8.fetchColumn()方法
如果想獲取指定記錄里的一個(gè)字段結(jié)果,則可以使用PDOStatement::fetchColumn()。
$rs = $db-query("SELECT COUNT(*) FROM foo");
$col = $rs-fetchColumn();
echo $col;
?
一般使用fetchColumn()方法進(jìn)行count統(tǒng)計(jì),對(duì)某些只需要單字段的記錄可以很好地操作。
9.回調(diào)函數(shù)
PDO還規(guī)定在每一個(gè)fetch模式下,經(jīng)過處理后的結(jié)果中使用一個(gè)回調(diào)函數(shù)。
function draw_message($subject,$email) { … }
$res = $db-query(“SELECT * FROM msg”);
$res-fetchAll(PDO::FETCH_FUNC,“draw_message”);
?
10.直接查詢的問題
直接使用Query查詢行每次都會(huì)直接提交給數(shù)據(jù)庫,如果查詢較多,每次頻頻查詢將導(dǎo)致效率降低。
另外,在安全問題上,沒有過濾一些特殊字符容易產(chǎn)生SQL注入。
11.過濾字符
下面我們來看看如何使用PDO進(jìn)行過濾引起SQL注入的方法,即過濾特殊字符。我們?cè)赑DO中使用quote()方法,使用例子如下:
$query = “SELECT * FROM users WHERE
login=“.$db-quote($_POST[‘login’]).”
AND
passwd=“.$db-quote($_POST[‘pass’]);
12.事務(wù)處理
PDO驅(qū)動(dòng)程序支持所有的事務(wù)數(shù)據(jù)庫,并且PDO提供更簡(jiǎn)便的方法,如下:
$db-beginTransaction();
if ($db-exec($qry) === FALSE) {
$db-rollback();
}
$db-commit();
?
13.執(zhí)行一個(gè)批處理事務(wù)
在下面的示例中,假設(shè)我們?yōu)橐粋€(gè)新雇員創(chuàng)建一組條目,這個(gè)雇員有一個(gè)ID號(hào),即23。除了輸入這個(gè)雇員的基本數(shù)據(jù)外,還需要記錄雇員的薪水。分別完成兩個(gè)更新很簡(jiǎn)單,但通過將這兩個(gè)更新包括在beginTransaction()和commit()調(diào)用中,就可以保證在更改完成之前,其他人無法看到更改。如果發(fā)生了錯(cuò)誤,catch塊可以回滾事務(wù)開始以來發(fā)生的所有更改,并打印出一條錯(cuò)誤消息。代碼內(nèi)容如下:
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();
}
?
$sql
=
'select
count(*)
from
tb_root';
$result
=
$pdo-query($sql);//提交sql
$rowsNumber
=
$result-fetchColumn();//取回結(jié)果集中的一個(gè)字段
echo
$rowsNumber;
query方法用來提交select語句,exec方法一般用于insert,update,
delete等
對(duì)于普通的查詢,可以這樣做
$sql
=
'select
*
from
tb_root';
$result
=
$pdo-query($sql);
$rows
=
$result-fetchAll(PDO:FETCH_ASSOC);//取得所有行
$rowsNumber
=
count($rows);
echo
$rowsNumber;
區(qū)別是:
PHP采用pdo方式訪問數(shù)據(jù)庫時(shí),您不必再使用再為它們封裝數(shù)據(jù)庫操作類,只需要使用PDO接口中的方法就可以對(duì)各種數(shù)據(jù)庫進(jìn)行操作。
本文實(shí)例講述了PHP使用pdo連接access數(shù)據(jù)庫并循環(huán)顯示數(shù)據(jù)操作。分享給大家供大家參考,具體如下:
PDO連接與查詢:
try
{
$conn
=
new
PDO("odbc:driver={microsoft
access
driver
(*.mdb)};
dbq=".realpath("MyDatabase.mdb"))
or
die("鏈接錯(cuò)誤!");
//echo
"鏈接成功!";
}
catch(PDOException
$e){
echo
$e-getMessage();
}
$sql
=
"select
*
from
users";
1.
foreach()方法
foreach
($conn-query($sql)
as
$row)
{
$row["UserID"];
$row["UserName"];
$row["UserPassword"];
}
2.
while()方法
$rs
=
$conn-query($sql);
$rs-setFetchMode(PDO::FETCH_NUM);
while($row=$rs-fetch()){
$row[0];
$row[1];
$row[2];
}
php使用PDO抽象層獲取查詢結(jié)果,主要有三種方式:
(1)PDO::query()查詢。
看下面這段php代碼:
?php
//PDO::query()查詢
$res
=
$db-query('select
*
from
user');
$res-setFetchMode(PDO::FETCH_NUM);
//數(shù)字索引方式
while
($row
=
$res-fetch()){
print_r($row);
}
?
(2)PDO-exec()處理sql
?php
//PDO-exec()處理sql
$db-setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$res
=
$db-exec("insert
into
user(id,name)
values('','php點(diǎn)點(diǎn)通')");
echo
$res;
?
(3)PDO::prepare()預(yù)處理執(zhí)行查詢
?php
//PDO::prepare()預(yù)處理執(zhí)行查詢
$res
=
$db-prepare("select
*
from
user");
$res-execute();
while
($row
=
$res-fetchAll())
{
print_r($row);
}
?
setAttribute()
方法是設(shè)置屬性,常用參數(shù)如下:
PDO::CASE_LOWER
--
強(qiáng)制列名是小寫
PDO::CASE_NATURAL
--
列名按照原始的方式
PDO::CASE_UPPER
--
強(qiáng)制列名為大寫
setFetchMode方法來設(shè)置獲取結(jié)果集的返回值的類型,常用參數(shù)如下:
PDO::FETCH_ASSOC
--
關(guān)聯(lián)數(shù)組形式
PDO::FETCH_NUM
--
數(shù)字索引數(shù)組形式
PDO::FETCH_BOTH
--
兩者數(shù)組形式都有,這是默認(rèn)的
PDO::FETCH_OBJ
--
按照對(duì)象的形式,類似于以前的
mysql_fetch_object()
對(duì)上面總結(jié)如下:
查詢操作主要是PDO::query()、PDO::exec()、PDO::prepare()。
PDO-query()
—
處理一條SQL語句,并返回一個(gè)“PDOStatement”
PDO-exec()
—
處理一條SQL語句,并返回所影響的條目數(shù)
PDO::prepare()主要是預(yù)處理操作,需要通過$rs-execute()來執(zhí)行預(yù)處理里面的SQL語句
最后介紹兩個(gè)常用的函數(shù):
(1)fetchColumn()獲取指定記錄里一個(gè)字段結(jié)果,默認(rèn)是第一個(gè)字段!
?php
$res
=
$db-query('select
*
from
user');
//獲取指定記錄里第二個(gè)字段結(jié)果
$col
=
$res-fetchColumn(1);
echo
$col;
?
(2)fetchAll(),從一個(gè)結(jié)果集中獲取數(shù)據(jù),然后存放在關(guān)聯(lián)數(shù)組中
?php
$res
=
$db-query('select
*
from
user');
$res_arr
=$res-fetchAll();
print_r($res_arr);
?
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP基于pdo操作數(shù)據(jù)庫技巧總結(jié)》、《php+Oracle數(shù)據(jù)庫程序設(shè)計(jì)技巧總結(jié)》、《PHP+MongoDB數(shù)據(jù)庫操作技巧大全》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:PHP使用PDO連接ACCESS數(shù)據(jù)庫PHP數(shù)據(jù)庫鏈接類(PDO+Access)實(shí)例分享php中mysql連接方式PDO使用詳解關(guān)于php連接mssql:pdo
odbc
sql
serverPhp中用PDO查詢Mysql來避免SQL注入風(fēng)險(xiǎn)的方法php中在PDO中使用事務(wù)(Transaction)全新的PDO數(shù)據(jù)庫操作類php版(僅適用Mysql)php使用pdo連接并查詢sql數(shù)據(jù)庫的方法php使用pdo連接mssql
server數(shù)據(jù)庫實(shí)例PHP實(shí)現(xiàn)PDO的mysql數(shù)據(jù)庫操作類