phpsqlite源碼
PHP5已經綁定sqlite
1、手動添加的php的pdo的驅動擴展支持,在PHP.ini添加
extension=php_pdo.dll
extension=php_pdo_sqlite.dll
extension=php_sqlite.dll
extension_dir="C:"
2、在C:保證有php_sqlite.dll,php_pdo_sqlite.dll,
php_pdo.dll擴展庫
3、重啟apache
4、下載SQLitemanager,createadatabase,保存名「db.sqlite」的資料庫,建表,
或者sqliteadmin
5、在PHP鏈接SQLite
方法一、$db=newPDO('sqlite:db.sqlite');
print_r($db);
$sth=$db->query("select*fromaqo");
方法二、if($db=sqlite_open('db.db',0666,$sqliteerror)){
sqlite_query($db,'CREATETABLEfoo(barvarchar(10))');
sqlite_query($db,"INSERTINTOfooVALUES('fnord')");
$result=sqlite_query($db,'selectbarfromfoo');
var_mp(sqlite_fetch_array($result));
}else{
die($sqliteerror);
}
⑵ 如何學習sqlite源碼
先來說說sqlite的資料.
首先sqlite的資料其實是不多不少的.
不少的原因是因為這些資料確實能夠讓你明白sqlite的設計原理.
說它不多的原因是也就讓你明白其原理, 僅此而已.
sqlite的資料主要來自四個地方, 從簡到深依次為:
1.<>, 這是一本介紹sqlite"基本原理"的小書, 只有80頁左右, 介紹了sqlite的"後端"原理. 這本書在網路有下載, 純英文版的, 鏈接:inside sqlite_網路知道. 在上面的github上, 我們項目的同伴對這本書做了翻譯, 不過還沒完成, 建議直接掃原版.
2.官方文檔, 連接:SQLite Documentation. 但是裡面的文檔對於學習者來說也有輕重之分, 建議主要閱讀 "SQLite Technical/Design Documentation" 這一欄的技術文檔.
3.<<SQLite Database System: Design and Implementation>>. 這也是一本說sqlite的小書, 不到200頁. 這本書的內容其實和<<inside sqlite>>有重疊, 甚至不少地方的段落是直接復制過來的... 不過這本書比<<inside sqlite>>詳細很多, 也建議掃描一遍. 這本書我目前在做翻譯, 做了3,4,5,6四章的翻譯了. 不過是很粗翻譯, 不建議直接看...
4.源碼注釋. sqlite的源碼注釋非常詳細, 詳細到比上面兩本書說的還多... sqlite的每份.c代碼內的注釋差不多快比代碼還多了, 而且除了將基本架構外, 很多上述資料沒有提到的細節, 也在源碼注釋中被提了出來.
================================================================
接下來說一下本人推薦的學習方法~~
================================================================
下面是認真學習的方法, 如果想快速暴力的學習, 直接看下一段.
想要認真點學習的話.
應該先去看"Architecture of SQLite"這篇文檔, 該文檔詳細的介紹了sqlite的7層結構, 總體被分為了"前段", "中層VM", "後端".
看完arch.html那文過後, 你就知道"前端"主要做的是語法分析, "後端"主要實現了資料庫性質(ACID, 增刪查改).
個人建議從後端開始學習, 畢竟學習sqlite是學習怎麼實現資料庫.
後端的tree, pager, os三層, 其實都不難(起碼理解起來不難),
我建議OS->PAGER->TREE這樣邊學習, 邊寫demo.
簡要說一下我在學習這三層過程中遇到的一些點, 希望能幫到樓主.
OS:
os是很薄的一層, 主要是為了提高可移植性而被設計出來的.
學習這一層的方法很粗暴:看"The OS Backend (VFS) To SQLite", 然後去看源碼中的"test_demovfs.c".
主要搞清下面三個結構體.
sqlite3_vfs
sqlite3_io_methods
sqlite3_file
在我github中的demo1.1中, 有一個更簡單的demo, 可以參考看下裡面的os.c, os.h, unix_os.c三份代碼.
-------------------------------------------------
Pager:
Pager主要實現了三段功能: ACID, log, cache.
先說ACID:
ACID的這部分我只看了最最基本的方法, 然後選擇跳過的, sqlite實現ACID的方法可以看"Atomic Commit In SQLite",
這里是我翻譯的, 能看,
"how-to-implement-a-DB-like-sqlite/SQLite怎樣實現原子性.md at master · qw4990/how-to-implement-a-DB-like-sqlite · GitHub".
除了這篇最基本的文檔, 推薦看<<SQLite Database System: Design and Implementation>>的3章和4章, 看完能理解sqlite實現ACID的基本方法.
接著是cache, sqlite提供了插件式的cache結構, 所以你或許會驚訝為什麼sqlite裡面同時有pager.c, pcache.c, pcache1.c:
cache這個部分比較簡單, <<inside sqlite>>第三章, <<SQLite Database System>>第五章都有詳細的介紹, 主要講解了pager實現cache的方法.
在我github中的demo1.1中, cache的功能也已經完成了, 1 可以參考看下裡面的pager.h, pager.c, pcache.c, pcahce1這四份代碼.
最後是log:
這部分我現在直接選擇了忽視...
----------------------------------------------------
Tree層:
sqlite的tree層就是用B+/B-樹維護數據, 以達到快速"增刪查改"的目的.
這一層在官方文檔里沒多少資料.
先是演算法本身, 也就是B+/B-/B樹, 沒什麼好說的, 很多演算法書都有.
接下來重點是sqlite怎麼將B樹應用到自身的資料庫中的.
這一點可以看<<inside sqlite>>的第5章, <<SQLite Database System>>的第6章, 都有很詳細的介紹.
<<SQLite Database System>>講得更為仔細, 除了說原理外, 還說了sqlite里btree大致被分為了幾個結構體在工作.
以上就是我學習後端遇到的一些點吧.
=============================================================
如果嫌棄上面的學習方法麻煩的話,
可以先掃一下"Architecture of SQLite",
接著再看一下"Atomic Commit In SQLite",
最後簡單粗暴的把推薦的那兩本書掃完,
也大致知道sqlite是怎麼設計的了.
不過個人認為sqlite是一個"大師級的精緻的工藝品", 光看完兩本書就說自己學完了它, 未免有點"暴殄天物".
除了基本的資料庫設計方法(也就是那兩本書的內容), sqlite的源代碼中所蘊含的編程技巧, 工程設計, 以及各種小考慮, 也是非常值得吸收學習的.
=============================================================
最後總結一下
如果想簡單粗暴快捷的學習, 直接掃arch.html, atomiccommit.html和那兩本書, 就能明白sqlite是怎樣被設計的了.
如果想深入學習, 建議從7層開始向前學, 邊翻文檔邊看源碼邊寫demo.
⑶ 我電腦有php 源碼 怎麼訪問怎麼修改
PHP是動態腳本語言,必須要有解譯器才能執行,一般PHP需要有apache或iis伺服器支持,當然你也可以下載集成安裝環境.下面我介紹幾個windows下的集成環境:
大家都知道LAMP才是最佳組合,但有時候也需要把環境架設到Windows系統上,因為Windows易用,界面友好,軟體豐富,操作起來非常方面,因此對新手來說在Windows平台下使用Apache、MySQL、PHP也確實是一個不錯的選擇。
下面我介紹幾種Windows系統下集成的PHP開發環境,希望能對初學者有所幫助!
XAMPP - XAMPP是一款具有中文說明的功能全面的集成環境,XAMPP並不僅僅針對Windows,而是一個適用於Linux、Windows、Mac OS X 和Solaris 的易於安裝的Apache 發行版。軟體包中包含Apache 伺服器、MySQL、SQLite、PHP、Perl、FileZilla FTP Server、Tomcat等等。默認安裝開放了所有功能,安全性有問題,需要進行額外的安全設定。
WampServer - WampServe集成了Apache、MySQL、PHP、phpmyadmin,支持Apache的mod_rewrite,PHP擴展、Apache模塊只需要在菜單「開啟/關閉」上點點就搞定,省去了修改配置文件的麻煩。
AppServ - 集成了Apache、PHP、MySQL、phpMyAdmin,較為輕量。
WAMP集成環境的出現,省去繁瑣的配置步驟,你就可以把更多的精力用在學習php程序上了。
⑷ PHP中怎麼使用SQLite資料庫,最好可以把創建和連接資料庫的代碼發出來。謝謝!急!急!急!
首先說基本配置:
PHP SQLite 的使用和配置方法:
在PHP 5.1.x 以後自帶了 SQLtie 資料庫功能,只需要在配置PHP.ini中開啟即可
;extension=php_sqlite.dll
在PHP 5.2.x 以後自帶了 SQLtie PDO資料庫功能,只需要在配置PHP.ini中開啟即可
;extension=php_pdo_sqlite.dll
SQLite 資料庫管理:
1、SQLiteManager與PHPmyadmin不同,需要添加管理的資料庫
2、Windows下使用添加路徑需要將 X: \**\** 改為 X:/**/**
3、 創建資料庫的時候需要指定SQLite 資料庫文件存放的路徑
再說操作:
<?php
$db_path = 'sqlite3_db_php';
$db = new SQLite3($db_path); //這就是創建資料庫,也是連接資料庫
if (!!$db) {
//下面創建一個表格
$db->exec('CREATE TABLE user (id integer primary key, name varchar(32), psw varchar(32))');
⑸ php網站程序用什麼資料庫
您好,你的問題,我之前好像也遇到過,以下是我原來的解決思路和方法,希望能幫助到你,若有錯誤,還望見諒!展開全部
常規方式
常規方式就是按部就班的讀取文件了。其餘的話和上述方案一致。
// 讀取配置文件內容
$handle = fopen("filepath", "r"); $content = fread($handle, filesize("filepath"));123
PHP解析XML
上述兩種讀取文件,其實都是為了PHP解析XML來做准備的。關於PHP解析XML的方式的博客有很多。方式也有很多,像simplexml,XMLReader,DOM啦等等。但是對於比較小型的xml配置文件,simplexml就足夠了。
配置文件
<?xml version="1.0" encoding="UTF-8" ?><mysql>
<!-- 為防止出現意外,請按照此標准順序書寫.其實也無所謂了 -->
<host>localhost</host>
<user>root</user>
<password>123456</password>
<db>test</db>
<port>3306</port></mysql>12345678910
解析非常感謝您的耐心觀看,如有幫助請採納,祝生活愉快!謝謝!
⑹ 如何在php中查詢sqlite 並進行展示
// set access parameters
$db = "users.db";
// open database file
// make sure script has read/write permissions!
$conn = sqlite_open($db) or die ("ERROR: Cannot open database");
// create and execute INSERT query
$sql = "INSERT INTO users (id, username, country) VALUES ('5', 'pierre', 'FR')";
sqlite_query($conn, $sql) or die("Error in query execution: " .sqlite_error_string(sqlite_last_error($conn)));
// create and execute SELECT query
$sql = "SELECT username, country FROM users";
$result = sqlite_query($conn, $sql) or die("Error in query execution: " .sqlite_error_string(sqlite_last_error($conn)));
// check for returned rows
// print if available
if (sqlite_num_rows($result) > 0) {
while($row = sqlite_fetch_array($result)) {
echo $row[0] . " (" . $row[1] . ") ";
}
}
// close database file
sqlite_close($conn);
⑺ 請問PHP怎麼讀取sqlite的BLOB欄位
// 連接字元串 data source=d:\test.db3;password=1234
SQLiteConnectionStringBuilder connStr = new SQLiteConnectionStringBuilder();
connStr.DataSource = @"d:\test.db3";
connStr.Password = "1234";
conn = new SQLiteConnection(connStr.ToString());
conn.Open();
// 插入數據
string SQL = "INSERT INTO test(k) VALUES(:k)";
SQLiteCommand cmd = conn.CreateCommand();
cmd.CommandText = SQL;
// 取圖標,准備插入到資料庫BLOB欄位
FileStream picStream = File.OpenRead(@"d:\1.bmp");
byte[] bArray = new byte[picStream.Length];
picStream.Read(bArray, 0, bArray.Length);
picStream.Close();
cmd.Parameters.Add("k", DbType.Binary).Value = bArray; // BLOB
cmd.ExecuteNonQuery();
//取出數據
cmd.CommandText = "SELECT k FROM test";
System.Data.SQLite.SQLiteDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
MemoryStream streamImage = new MemoryStream(reader["k"] as byte[]);
pictureBox1.Image = Image.FromStream(streamImage);
streamImage.Close(); // 關閉流
}
reader.close();
conn.close();
⑻ 想求幾個thinkphp開發的實例及源碼 我是新手
在官網上有開發的實例及源碼可以下載。地址:http://www.thinkphp.cn/case/index.html。