33 votes

Erreur: le fichier est crypté ou n'est pas une base de données

J'ai utilisé PHP pour créer une base de données avec une table. J'ai fait de la façon suivante:

<?php
$db = new SQLiteDatabase("test.db");
unset($db);
$db = sqlite_open("test.db");
sqlite_query($db,"create table students (names char(255))");
sqlite_close($db);
?>

Après j'exécute mon fichier PHP en ligne de commande: "php test.php" je reçois un nouveau fichier dans mon répertoire, qui est appelé "test.db" (c'est ce que je voulais). Que, dans la ligne de commande, je tape "sqlite3 test.db". De cette façon, je rentre dans le sqlite ligne de commande de session. Puis, à l'intérieur sqlite3, j'type ".les tables" (je voulais vérifier si une nouvelle base de données contient des tableaux dont il est censé contenir). Le résultat que j'obtiens:

Error: file is encrypted or is not a database

Donc, il ne fonctionne pas. Quelqu'un sait quelque chose à propos de ce problème? Je vous remercie d'avance pour toute aide.

46voto

togo31 Points 371

Eh bien, il n'est jamais trop tard pour mettre à jour un message ... au cas où quelqu'un serait confronté à ce problème ...

Vous avez en fait raison, c'est un problème de non-concordance de version.

Pour ouvrir une base de données en utilisant PHP5 et SQLite, nous devons utiliser un PDO et non la fonction sqlite_open ().

Exemple d’ouverture ou de création d’une base de données:

 try 
{
    /*** connect to SQLite database ***/

    $dbh = new PDO("sqlite:VPN0.sqlite");
    echo "Handle has been created ...... <br><br>";

}
catch(PDOException $e)
{
    echo $e->getMessage();
    echo "<br><br>Database -- NOT -- loaded successfully .. ";
    die( "<br><br>Query Closed !!! $error");
}

echo "Database loaded successfully ....";
 

13voto

Ted Xu Points 448

J'ai rencontré le même problème, utilisez pdo au lieu de sqlite_open ()

ce lien est très utile et voici mon extrait de code, fonctionne parfaitement, espérons que cela aide

 $dir = 'sqlite:YourPath/DBName.db';
$dbh  = new PDO($dir) or die("cannot open the database");
$query =  "SELECT * from dummy_table";
foreach ($dbh->query($query) as $row)
{
    echo $row[0];
}
 

9voto

fin Points 207

il s'agit probablement d'une incompatibilité de version entre la version php sqlite et votre exécutable autonome sqlite.

voir ceci: http://us3.php.net/manual/en/book.sqlite.php - sous "Notes contribuées par l'utilisateur", d'Andrew Paul Dickey.

pour une solution rapide, vous pouvez installer et utiliser le fichier exécutable autonome sqlite2.

3voto

ridgerunner Points 14773

Récemment, j'ai rencontré exactement le même problème et qui ont compris ce qui se passait. (Oui, toutes les autres réponses sont correctes, - c'est une incompatibilité de version problème.) Un suis ce détachement pour fournir des informations supplémentaires qui peuvent être utiles pour ceux qui rencontrent ce problème...

Résumé:

L'erreur est due au fait que l' sqlite3.exe outil de ligne de commande (qui implémente SQLite version 3), ne peut pas lire les fichiers de base de données créées à l'aide de PHP procédural de l'interface de SQLite (qui implémente SQlite version 2).

Discussion:

Je suis un tutoriel qui explique comment utiliser SQLITE avec PHP: SQLite PHP tutorial (Notez que je suis en cours d'exécution PHP 5.2.14 sur Windows XP). Il s'avère que PHP 5.2 a deux (incompatibles), des moyens d'interfaçage avec le système de gestion de base de données SQLite; une procédure d'API (SQLite) et une API orientée objet (SQLite Fonctions (PDO_SQLITE)). La procédure API utilise SQLite version 2 et la programmation orientée objet API utilise SQLite version 3. Pour PHP sous Windows plates-formes, la procédure de l'API est activée par de décommenter cette ligne en php.ini:

extension=php_sqlite.dll

Alors que la programmation orientée objet API est activée par de décommenter ces lignes:

extension=php_pdo.dll
extension=php_pdo_sqlite.dll

Notez qu'il y a un libre Win32 outil qui permet la gestion et la manipulation de toutes les versions de bases de données SQLite: SQLite Administrator. Cet outil permet de convertir une version 2 de la base de données (créé par la procédure de l'API de PHP) dans une version 3 de la base de données qui peut être lu à l'aide de l' sqlite3.exe outil de ligne de commande.

2voto

MartyIX Points 4839

La question a deux ans mais elle peut maintenant être résolue comme suit:

 class MyDB extends SQLite3
{
    function __construct()
    {
            $dbFile = __DIR__ . '/../../../adminer/Dictionary.sqlite';
            $this->open($dbFile);
    }
}

$db = new MyDB();
$db->exec('CREATE TABLE students (names VARCHAR(80))');
echo "done";
 

Source: http://php.net/manual/en/sqlite3.open.php

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X