Por que a classe 'SQLiteDatabase' não foi encontrada em /var/www/*.php?

5

Estou tentando usar o sqlite do PHP. Eu tenho o seguinte código simples:

<?php
$db = new SQLiteDatabase("test2.sdb");
unset($db);
?>

Como resultado deste código (que eu executo na linha de comando "php test2.php") eu recebo:

Fatal error: Class 'SQLiteDatabase' not found in /var/www/test2.php on line 3

Alguém sabe como posso tornar o PHP capaz de usar o sqlite?

P.S. Aqui descobri que "o suporte ao SQLite está habilitado por padrão em uma compilação PHP Linux padrão, começando com o PHP 5.0. " E eu tenho "PHP Version = > 5.2.6-2ubuntu4.6". Então, o sqlite deve ser ativado a menos que o "--disable-sqlite". No meu caso, saída de "phpinfo ();" não contém "sqlite".

    
por Roman 28.02.2010 / 11:49

9 respostas

2

Existem alguns relatórios sobre o mesmo problema no Google, mas não há uma solução definitiva.

Verifique se a sua extensão SQLlite está habilitada em PHP, e você deve ser capaz de usar a família de funções sqlite_ * (como sqlite_open) ao invés da abordagem OOP, não ideal eu sei.

Além disso, verifique se o seu módulo PECL para sqlite é > = 1.0.0.

    
por 28.02.2010 / 11:57
3

Classe SQLiteDatabase é um objeto da biblioteca sqlite , cujo suporte foi descartado em PHP 5.4, mas em vários sistemas e configuração poderia ser desabilitado em versões anteriores, já que esta biblioteca estava marcada para ser obsoleta .

A biblioteca php_sqlite.dll (Windows) ou php_sqlite.so (Linux) não é mais suportada em versões mais recentes do PHP e foi substituída por php_sqlite3.dll ou php_sqlite3.so , respectivamente.

Você pode:

  1. Tente encontrar php_sqlite.dll ( php_sqlite.so ) em algum lugar da Internet. Links como este ou isso pode ser útil para você. No entanto, você terá que combinar cuidadosamente o antigo arquivo de biblioteca SQLite com a plataforma do PHP ( x64 ou x86 ), o mecanismo de construção ( VC6 , VC9 ou VC11 ), versão ( 5.x ) e type ( TS para thread safe ou NTS para non-thread safe ). Isso pode ser uma tarefa difícil.

  2. Deixe o php_sqlite.dll ( SQLiteDatabase ) para trás e envie para o novo php_sqlite3.dll ( SQLite3 object). Você tem que primeiro usar uma ferramenta como o SQLite Studio para converter seu arquivo de banco de dados de 2.1 para 3.0 (o tamanho pode ser reduzido até mesmo por um metade) e depois compare cuidadosamente SQLite e SQLite3 PHP páginas de manual para alterar objetos necessários e chamar funções.

Se a opção dois , note que isso não deve ser um trabalho árduo, já que as mudanças não são tão grandes. Por exemplo, o que aprendi até agora:

  • 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.

Eu, é claro, aconselho strongmente qualquer um a seguir em frente e escolher a opção segundo . O progresso é, na maioria dos casos, a melhor de duas opções disponíveis.

    
por 16.05.2013 / 15:02
2

Eu tive o mesmo problema.

Se você atualizou sua versão do php, alguns dos arquivos de configuração antigos podem estar fazendo referência a um arquivo inexistente.

Veja os arquivos ". ini" no diretório "conf.d" . No meu caso, o caminho do meu diretório "conf.d" é "/etc/php5/conf.d" em um sistema Debian.

Falando especificamente sobre a classe "SQLiteDatabase" , meu problema era o arquivo "sqlite.ini" apontando para "sqlite.so" que não existe.

Após excluir o arquivo "sqlite.ini" , verifique se há um arquivo ini apontando para uma extensão sqlite válida (neste caso, o "sqlite3.ini" apontando para "sqlite3.so" ) e reinicie o apache tudo funcionou bem para mim.

Espero que ajude.

    
por 27.10.2011 / 13:58
1

Eu tive o mesmo problema e eu tinha esquecido de descomentar extensão = php_pdo_sqlite.dll

AND

extension = php_sqlite.dll

    
por 26.03.2010 / 02:53
1

Eu tive um problema parecido, e ao tentar instalar o sqlite usando "yum install sqlite.i386" ele disse que ele estava instalado e atualizado, mas por alguma razão não havia nada no php.ini dele não está funcionando, embora phpinfo estava relatando "com sqlite = shared", etc.

Adicionando "extension = sqlite.so" em algum lugar no php.ini fez funcionar, eu coloquei o meu sob a seção PDO perto do fundo, mas duvido que seja importante onde você coloca realmente.

Ah, e certifique-se de reiniciar o apache antes de verificá-lo, ou apenas reinicie a caixa! :)

    
por 23.03.2011 / 02:29
1

Este é um oldie mas um goodie, que acabei de ser picado de novo !!! Acontece que existem extensões sqlite e sqlite3 php para instalar, você pode ter o último, mas estar olhando para a página de manual para a extensão "sqlite".

Minha solução foi executar:

print_r(get_declared_classes());

E isso exibe:

.......
[130] => mysqli_stmt
[131] => SQLite3
[132] => SQLite3Stmt
[133] => SQLite3Result
[134] => ImagickException
.......

Portanto, minha instalação não define a classe SQLiteDatabase apenas SQLite3. Agora, consulte a seção do manual do php para sqlite3.

    
por 18.09.2013 / 14:24
1

Com a versão PHP 5.6.2 em um sistema Arch Linux (Atual: Nov2014)

Por favor, note também para fazer para:
Defina em /etc/php/php.ini o caminho onde sua extensão sqlite3.so reside na seção:

[sqlite3]
sqlite3.extension_dir = / path / to / your / modules

As minas são instaladas em '/ usr / lib / php / modules' e podem ser listadas com o pacman:

$ sudo pacman -Ql php-sqlite

Que listará as extensões sqlite3.so instaladas e outros arquivos para você.

Você pode verificar se o PHP encontrou a extensão consultando:

$ php --ri sqlite3

Estou usando o Adminer no momento, como explicado no wiki.archlinux.org, e ele criou um banco de dados depois que eu configurei este caminho no php.ini.

Obrigado pela informação fornecida acima e Sucesso.

    
por 12.11.2014 / 14:14
0

Verifique seu php.ini (por exemplo, no Windows):

extension=php_pdo.dll
extension=php_pdo_sqlite.dll
extension=php_sqlite.dll
    
por 16.02.2012 / 15:46
-1

Verifique seu php.ini. 1) Digite o caminho para o arquivo de extensões manualmente. Não recomendado            extension_dir="C: \ php \ ext" 2) Não se esqueça de extensões não comentadas no capítulo "Dynamic Extensions": extensão = php_mysqli.dll extensão = php_pdo_sqlite.dll extensão = php_sqlite3.dll

    
por 25.12.2013 / 19:46

Tags