SQLite parou de funcionar após a atualização

4

Como muitos de vocês fizeram, eu fiz o upgrade de Lucid para Precise esta semana e quase tudo parece funcionar.

tudo, exceto… SQLite, que estava funcionando bem antes, mas não mais.

Eu verifiquei tudo: phpinfo (), php.ini, sqlite3.ini.

O comando sqlite funciona bem, mas quando tento usar PHP ... * PLOP *, nada funciona.

Eu recebo a mensagem

Fatal error: Class 'SQLiteDatabase' not found in /var/www/test/sqlite/index.php on line 4

Linha 4 sendo

$db = new SQLiteDatabase('test.sqlite', 0666);

Alguma dica?

editar

Você pode ver meu phpinfo () aqui: link

O log do apache é

 * Restarting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
    
por SteeveDroz 03.05.2012 / 13:16

3 respostas

6

Extensões

De acordo com a página Extensões Específicas do Banco de Dados do Fornecedor no site do PHP, há dois Extensões SQLite :

SQLite3 extensão é um novo substituto de SQLite , que em breve se tornará obsoleto :

% bl0ck_qu0te%

Ubuntu 10.04 vs 12.04

Agora, alguns aspectos práticos. Vamos dar uma olhada na configuração padrão do servidor da Web que foi instalada usando:

sudo apt-get install apache2 php5 php5-sqlite

Ubuntu 10.04:

# php --ri sqlite

SQLite

SQLite support => enabled
PECL Module version => 2.0-dev
SQLite Library => 2.8.17
SQLite Encoding => UTF-8

# php --ri sqlite3

sqlite3

SQLite3 support => enabled
SQLite3 module version => 0.7-dev
SQLite Library => 3.6.22

Ubuntu 12.04:

# php --ri sqlite

Extension 'sqlite' not present.

# php --ri sqlite3

sqlite3

SQLite3 support => enabled
SQLite3 module version => 0.7-dev
SQLite Library => 3.7.9

Portanto, a instalação padrão do PHP no Ubuntu 12.04 (a partir da gravação desta versão 5.3.10) já não possui a extensão sqlite . A saída acima declara que apenas sqlite3 extensão está presente, que veio de php5-sqlite package.

Solução

Escolha seu mal:

  1. A abordagem correta em longo prazo seria adaptar o código para que ele funcionasse em SQLite3 . As alterações seriam pequenas, mas isso poderia envolver algum trabalho indesejado no estilo copiar e colar em uma grande quantidade de arquivos. Se este for o caso, e correto não é uma palavra correta aqui, a solução 2 é para você.
  2. Instalar extensão obsoleta de PECL .
por Andrejs Cainikovs 07.05.2012 / 15:08
1

Seguindo a resposta de Andrejs Cainikovs 'e recomendando enfaticamente que você atualize o código, aqui alguns exemplos de que tipo de trabalho deve ser feito, ao migrar de SQLiteDatabase class ( biblioteca sqlite ) para SQLite3 class ( SQLite3 biblioteca).

Por exemplo:

  • SQLiteDatabase - > SQLite3 ,
  • SQLiteDatabase::unbufferedQuery - > SQLite3::query ,
  • SQLiteResult::fetchAll(SQLITE_*) - > SQLite3Result::fetchArray(SQLITE3_*) etc.

Quanto à busca, no antigo SQLite , tivemos:

$rowsIMEI = $db->unbufferedQuery($imeiSQL)->fetchAll(SQLITE_ASSOC);

foreach($rowsIMEI as $r)
{
    ...
}

Enquanto, no novo SQLite3 , devemos:

$rowsIMEI = $db->query($imeiSQL);

while($r = $rowsIMEI->fetchArray(SQLITE3_ASSOC))
{
    ...
}

Outras alterações exigem quantidade de trabalho semelhante, portanto, isso não deve ser um processo vitalício.

Antes de começar, você deve primeiro usar uma ferramenta como SQLite Studio para converter seu arquivo de banco de dados de 2.1 para 3.0. O tamanho pode ser reduzido em até meio, então acho que vale a pena lutar por isso.

    
por trejder 16.05.2013 / 15:07
0

Solução ( NÃO para produção, apenas para reprodução):
1. Obtenha o arquivo deb do php5-sqlite do ubuntu11.04 ou de qualquer outro 2. Extraia e encontre o arquivo sqlite.so
- Você pode obter sqlite.so de outra forma, por exemplo, do seu sistema antigo -
3. Coloque o sqlite.so em / usr / lib / php5 / 20090626 + lfs /
4. Adicione isto ao php.ini (/etc/php5/apache2/php.ini):

extension=sqlite.so
    
por cb1986ster 18.05.2012 / 16:31