国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > SQLite > 正文

SQLite 入門介紹(三)

2024-09-07 00:10:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

SQLite 迭代器

在 PHP 5.0 中,有另外一種方式來(lái)從查詢中獲得行數(shù)據(jù),那就是運(yùn)用迭代器.

$db = new SQLiteDatabase("db.sqlite");
// 執(zhí)行非緩沖的查詢可以減少內(nèi)在的使用.
$res = $db->unbufferedQuery("SELECT * FROM foo");
foreach ($res as $row) { //迭代結(jié)果集對(duì)象
// 輸出代碼
print_r($row);
}

?>

迭代對(duì)象的工作過(guò)程除了不需要要鍵值(’keys’)和用 一個(gè)值來(lái)表示數(shù)組中所包含的特定的數(shù)據(jù)行之外,其它跟通過(guò)foreach()訪問(wèn)數(shù)組對(duì)象很相似.因?yàn)榈魇莾?nèi)部引擎句柄而不是函數(shù). 迭代器跟sqlite_fetch_*()函數(shù)比較用到的PHP代碼就少得很多了.并且不需要把結(jié)果集緩沖到內(nèi)存中.總之,迭代器是一種非常快速,但是簡(jiǎn) 單易用的獲取數(shù)據(jù)的方法.運(yùn)用SQLite的對(duì)象迭代器,不會(huì)存在什么不足之處,當(dāng)你需要遍歷一個(gè)多行數(shù)據(jù)集時(shí),你一定應(yīng)該考慮使用它們.

工具函數(shù)

SQLite擴(kuò)展也提供了一些在操作數(shù)據(jù)庫(kù)時(shí)使用起來(lái)很方便的工具函數(shù).其中一個(gè)就是sqlite_num_fields(), 可以用于獲得一個(gè)特定的結(jié)果集中的字段數(shù)(列數(shù)).
當(dāng) 然,也有其它選擇,如果你想取得數(shù)據(jù)的同時(shí)得到列數(shù),你可以對(duì)數(shù)據(jù)集使用count()方法,就可以獲得上面函數(shù)相同的數(shù)目.如果同時(shí)取回了字符串型和數(shù) 字型的主鍵,你必須讓結(jié)果一分為二,因?yàn)榻Y(jié)果數(shù)組中的字段入口數(shù)會(huì)是字段數(shù)的兩倍.如果你的腳本需要獲得特定表的列名時(shí),這個(gè)數(shù)目是很有用的.如果是這樣 的話,你就可以在一個(gè)循環(huán)中用sqlite_field_name()來(lái)獲得字段名稱信息.正如下例所示.[譯者注,本例是PHP5的情況,用的是OO接 口,在PHP4中,需要變換相對(duì)應(yīng)的函數(shù),具體請(qǐng)參見(jiàn)PHP Manual SQLite的參考一節(jié)]

$db = new SQLiteDatabase("db.sqlite");
$res = $db->unbufferedQuery("SELECT * FROM foo LIMIT 1");
//取得字段數(shù)目
$n_fields = $res->numFields();
$i = 0;
while ($i < $n_fields) {
//獲得單個(gè)字段名
$field_name = $res->fieldName($i );
echo $field_name."/n";
}

?>

很顯然,這是 獲得表中列名的一種很理想的方式.很明顯示地,當(dāng)源表中沒(méi)有任何行時(shí),這個(gè)方式就會(huì)失敗.并且這個(gè)方法取了一些你可能并不想用的數(shù)據(jù),因此,一個(gè)更好的解 決方法是用sqlite_fetch_column_types()函數(shù).這具函數(shù) 會(huì)返回特定表的列和類型,而不管表中的數(shù)據(jù)量如何.

緩存優(yōu)勢(shì)

在很多情況下,由于性能和內(nèi)存的原因,你可能想執(zhí)行非緩沖查詢.盡管如此,這存在在某種情況下所必須的輕微的功能損失.這也就說(shuō)明為什么,非緩沖查詢不總是最優(yōu)的選擇.

例如,假設(shè)你 想知道你的查詢到底取回了多少行數(shù)據(jù).如果用非緩存查詢的話,你必須一行行地查詢,才能知道這個(gè)數(shù)目.而用緩存查詢,只要不費(fèi)吹灰之力地執(zhí)行 sqlite_num_rows()函數(shù)就可以了. 這就可以取回查詢結(jié)果的行數(shù).非緩存查詢還僅限于線性數(shù)據(jù)獲取,這就意味著你必須取得一系列中所有行的信息,一次一行.而對(duì)于緩存查詢則沒(méi)有這個(gè)限制.你 可用sqlite_seek() 函數(shù)來(lái)到達(dá)任意一行,并且取回?cái)?shù)據(jù).只要需要,逆向地獲取行數(shù)據(jù)也是可以的.

$db = new SQLiteDatabase("db.sqlite");
$res = $db->query("SELECT * FROM foo");
$n_rows = $res->numRows(); // 獲得行數(shù)
$res->seek($n_rows - 1); // 到最后一行
// 返回獲取數(shù)據(jù)
do {
$data = $res->current(SQLITE_ASSOC); // 獲得行數(shù)據(jù)
print_r($data);
}
while ($res->hasPrev()&& $res->prev()); // 逆向前進(jìn),直到第一行

?>

定制函數(shù)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 建昌县| 阳朔县| 南郑县| 巴林右旗| 军事| 冕宁县| 崇明县| 浪卡子县| 霸州市| 衡阳县| 平远县| 多伦县| 定南县| 浦县| 化德县| 平塘县| 阿瓦提县| 和静县| 泸州市| 鄂尔多斯市| 自贡市| 图片| 颍上县| 寻甸| 当涂县| 天柱县| 古浪县| 婺源县| 萝北县| 太湖县| 鄂尔多斯市| 东台市| 鄂托克前旗| 靖宇县| 通榆县| 民县| 米脂县| 浮梁县| 浮山县| 利辛县| 都兰县|