web-dev-qa-db-fra.com

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. Je l'ai fait de la manière 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 avoir exécuté mon fichier PHP à partir de la ligne de commande: "php test.php", je reçois un nouveau fichier dans mon répertoire appelé "test.db" (c'est ce que je voulais). Puis, dans la ligne de commande, je tape "sqlite3 test.db". De cette façon, j'entre dans la session en ligne de commande sqlite. Ensuite, avec sqlite3, je tape ".tables" (je voulais vérifier si une nouvelle base de données contient des tables qu’elle est supposée contenir). Comme résultat, je reçois:

Error: file is encrypted or is not a database 

Donc ça ne marche pas. Est-ce que quelqu'un sait quelque chose sur ce problème? Merci d'avance pour toute aide.

34
Verrtex

Ceci est un problème d'incompatibilité de version.

Pour ouvrir une base de données utilisant PHP5 et SQLite, nous devons utiliser un PDO et la fonction not / sqlite_open(). Un exemple de comment ouvrir ou créer 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 ....";
46
togo31

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];
}
13
Ted Xu

c'est probablement une incompatibilité de version entre la version php sqlite et votre exécutable autonome sqlite.

voir ceci: http://us3.php.net/manual/fr/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.

9
fin

J'ai récemment rencontré exactement le même problème et j'ai compris ce qui se passait. (Oui, toutes les autres réponses sont correctes - il s’agit d’un problème d’incompatibilité de version.) Je publie ce message pour fournir des informations supplémentaires qui pourraient être utiles aux autres personnes rencontrant ce problème ...

Résumé:

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

Discussion:

Je suis un tutoriel qui explique comment utiliser SQLITE avec PHP: SQLite PHP tutorial (Notez que j’exécute PHP 5.2.14 sur Windows XP). Il s'avère que PHP 5.2 dispose de deux méthodes (incompatibles) d'interfaçage avec le système de gestion de base de données SQLite; une API procédurale ( SQLite ) et une API orientée objet ( Fonctions SQLite (PDO_SQLITE) ). L'API procédurale utilise SQLite version 2 et l'API OOP utilise SQLite version 3. Pour les plates-formes Windows PHP, l'API procédurale est activée en décommentant cette ligne dans php.ini:

extension=php_sqlite.dll

Alors que l'API OOP est activée en supprimant les commentaires de ces lignes:

extension=php_pdo.dll
extension=php_pdo_sqlite.dll

Notez qu’il existe un outil Win32 gratuit permettant d’administrer et de manipuler n’importe quelle version des bases de données SQLite: Administrateur SQLite . Cet outil permet de convertir une base de données version 2 (créée avec l’API procédurale de PHP) en une base de données version 3 pouvant être lue à l’aide de l’outil de ligne de commande sqlite3.exe.

3
ridgerunner

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

2
Martin Vseticka

Il existe un moyen plus simple de résoudre ce problème. Vous pouvez convertir le fichier de base de données sqlite 2 en sqlite 3. Je l’ai fait avec le programme SQLiteManager sous Mac OS X.

0
Centurion

Pourquoi ouvrez-vous la base de données deux fois?

Essayez ce code:

<?php
$db = sqlite_open( "test.db", 066, $err );
sqlite_query( $db, "CREATE TABLE students (names VARCHAR(80))" );
sqlite_close( $db );
?>

Edit: Fin a probablement raison. Peut-être devez-vous vérifier la version de SQLite avec phpinfo ().

0
svens