2012-04-18 96 views
4

我有一個PHP安裝,沒有SQLite功能作爲基本安裝,所以沒有sqlite_ *函數可用。是否有可能使用SQLite數據庫而不使用sqlite函數?

有沒有PHP庫(PHP代碼),可以訪問SQLite數據庫,而無需安裝任何插件到PHP?
(我不能更改服務器配置)

其實我只需要基本的支持(僅限報表)

基本上我正在尋找一個純PHP的SQLite司機很像https://github.com/kripken/sql.js被SQLite驅動程序的純JS實現。

+0

這個安裝幾歲?聽起來你可以做更新你的PHP安裝給我,SQLite已成爲PHP核心的一部分yonks ... – DaveRandom 2012-04-18 12:00:11

+1

你有權訪問'PDO'?你可以使用'phpinfo()'來檢查。在字符串'sqlite'或'sqlite2'中搜索該函數的輸出。 – RikkusRukkus 2012-04-18 12:06:22

+0

它是PHP5.3,但沒有將SQLite模塊編譯進去。我無法更新它。它基本上是不可用的,因爲文件系統是隻讀的,而SQLite-Databases沒有什麼意義,但是因爲我只是在閱讀...... - 是的,我有權訪問PDO,但不能訪問PDO中的sqlite或sqlite2。 – bardiir 2012-04-18 12:26:54

回答

0

我沒有在google上找到任何普通的php sqlite驅動搜索。 我試圖得到的東西梨但SQLite的MDB2驅動程序中進行使用SQLite PHP擴展的工作:

[email protected]:~# pear install MDB2_Driver_sqlite 
pear/MDB2_Driver_sqlite requires PHP extension "sqlite" 
No valid packages found 
install failed 

我安裝了PHP-sqlite的梨模塊去確定後:

[email protected]:~# pear install MDB2_Driver_sqlite 
downloading MDB2_Driver_sqlite-1.4.1.tgz ... 
Starting to download MDB2_Driver_sqlite-1.4.1.tgz (30,921 bytes) 
.........done: 30,921 bytes 
install ok: channel://pear.php.net/MDB2_Driver_sqlite-1.4.1 

閱讀代碼,任何PHP源碼包裝我發現有這樣的事情:

if (!function_exists('sqlite_open')) return false; 

所以,我想沒有人用PHP編寫的純sqlite的司機呢。抱歉。

1

任何php庫都是用純php編寫的,並且使用了一些底層函數,或者是一個應該安裝的模塊。

因此,唯一的選擇是將該模塊的C代碼並將其重寫爲php。 AFAIK是唯一需要的低級功能,正在使用網絡套接字,並且它們都可以在php中使用。

+1

是的,我正在尋找SQLite驅動程序的純PHP實現:) – bardiir 2012-04-18 12:41:37

+1

使用SQLite,該庫是整個事情。一個功能兼容的PHP庫實現將完全重寫整個項目! – Matthew 2012-04-22 02:57:12

3

一切皆有可能

不同的問題是,如果它足夠聰明,其實這樣做...

我認爲,更好的辦法是導入SQLite數據庫到MySQL或其他一些分貝是可用。 好吧,這仍需要sqlite安裝...

下面是如何可以來完成:

class ExtremelySimpleAndPowerfulSQLite { 
    private $database_file; 
    public function __construct($filename) { 
     $this->database_file = $filename; 
    } 

    public function sqlite_query($sql) { 
     ob_start(); 
     passthru("sqlite ".$this->database_file." '$sql'", $result); 
     if ($result <> 0) { 
      ob_end_clean(); 
      return false; 
     } 
     $sqlite_result = ob_get_contents(); 
     ob_end_clean(); 
     return $sqlite_result; 
    } 
} 

$sqlite = new ExtremelySimpleAndPowerfulSQLite("test.db"); 

// It works, huh... 
echo $sqlite->sqlite_query('select * from table'); 

if ($foobar = $sqlite->sqlite_query('select * from mytable')) 
    echo $foobar; 

這樣做的SQLite沒有這些PHP自己的sqlite的功能,所以...

+0

+1純粹和怪異的無意識的創造力:D |好吧,這完全適合這個問題,我當然希望可以從命令行命令幾乎不可用的問題推斷出來。 – bardiir 2012-04-22 08:59:19

+0

這不完全是我想要的,但它是迄今爲止最好的答案,並讓我大聲笑,所以你應該得到賞金。 – bardiir 2012-04-25 08:43:57

+0

「一切皆有可能」的道具和它的獨創性。讓我微笑。 – 2016-07-01 17:39:35

0

也許我有點晚了我的答案,但我敢肯定,這可以幫助其他用戶尋找這樣的問題。 SQLite是一個特殊的軟件,有時它可以代替MySQL或其他經典的數據庫。 (讓我們考慮低流量的網站..) 不幸的是,它是作爲PHP擴展提供的,所以當依賴第三方廉價主機提供商時可以禁用服務器端。這就是爲什麼我開始開發PHPFileDB,一個完整的平面文件數據庫,使用PHP編寫,完全支持SQL語法(我的目標是獲得與基於MySQL的框架的完全兼容)

很明顯,它是開源的,可以在https://github.com/morepaolo/PHPFileDB

希望能對您有所幫助!

相關問題