php sqlite_PHP: SQLite (PDO) - Manual

Issue:

Error: SQLSTATE[HY000]: General error: 1 unsupported file format

Resolution:

To solve this (and/or many issues) involving this type of error, I assumed the error to be generated from php. Well, it was to an extent. The sqlite pdo code offered the solution:

I researched the error by grep'ing the php source code and found the error string to come from php-5.1.4/ext/pdo_sqlite/sqlite/src/prepare.c, lines 265:278 :

/*

** file_format==1    Version 3.0.0.

** file_format==2    Version 3.1.3.

** file_format==3    Version 3.1.4.

**

** Version 3.0 can only use files with file_format==1. Version 3.1.3

** can read and write files with file_format==1 or file_format==2.

** Version 3.1.4 can read and write file formats 1, 2 and 3.

*/

if( meta[1]>3 ){

sqlite3BtreeCloseCursor(curMain);

sqlite3SetString(pzErrMsg, "unsupported file format", (char*)0);

return SQLITE_ERROR;

}

This is interesting as I am running SQLite version 3.3.5 which the databases were created in. I see that the SQLite PDO source in the php source is :

# cat ext/pdo_sqlite/sqlite/VERSION

3.2.8

My solution was then to find a version of sqlite that was =< 3.1.4. I found source for 3.1.3, compiled, recreated my database using that version (NOTE: the databases are unsupported between 3.1.x and 3.2.x versions of SQLite). Once I did this it worked.

Also as a side note, to get SQLite compiled as a PDO, I had to:

1) configure with

...

--enable-pdo=shared \

--with-sqlite=shared \

--with-pdo-sqlite=shared

--with-zlib

... \

'make && make install' if configure is successful.

2) Make sure the pdo libs were copied/installed to the correct directory. On my installation it was /usr/local/include/php/ext/pdo/

3) Make these changes in my php.ini:

- change ' extension_dir = "./" ' to ' extension_dir="/usr/local/include/php/ext/pdo/" '

- add/edit in this order:

extension=pdo.so

extension=pdo_sqlite.so

extension=sqlite.so

4) test php with : 'php -m' at the command line and solve any issues from there. Mostly php.ini config issues. Also restart the http service!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值