Hata: Dosya şifreli veya bir veritabanı değildir

7 Cevap php

Ben bir tablo ile bir veritabanı oluşturmak için PHP kullanılır. Ben şu şekilde yaptım:

<?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);
?>

"Php test.php" Ben dizinde yeni bir dosya olsun "test.db" denir (bu ne istediğini): Ben komut satırından benim PHP dosyası çalıştırmak sonra. Komut satırında, ben "Sqlite3 test.db" yazın, daha. Bu şekilde ben sqlite komut satırı oturumunda girin. Sonra, sqlite3 Withing, ben ". Tablolar" (Ben yeni bir veritabanı içermesi gerekiyordu tablolar içeriyorsa kontrol etmek istedim) yazın. Sonuç olarak ben alıyorum:

Error: file is encrypted or is not a database

Yani, çalışmıyor. Herkes bu sorun hakkında bir şeyler biliyor mu? Herhangi bir yardım için şimdiden teşekkür ederiz.

7 Cevap

Peki, birisi bu sorunu karşı karşıya durumda ... bir yazı güncellemek için geç asla ...

Siz doğru bu sürüm uyuşmazlığı konudur aslında.

PHP5 ve SQLite kullanarak bir DB açmak için bir PDO ve hiçbir sqlite_open işlevini kullanmanız gerekir .. Bir DB açmak veya oluşturmak için nasıl bir örnek:

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 ....";

Ben yerine sqlite_open PDO kullanmak, aynı sorunla karşı karşıya ()

this link çok yararlı ve benim kod parçacığını, mükemmel çalışır, yardımcı olur umarım

$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];
}

Bu büyük olasılıkla php sqlite sürümü ve bağımsız sqlite yürütülebilir arasında bir sürüm uyuşmazlığı olduğunu.

Bunu görmek: http://us3.php.net/manual/en/book.sqlite.php - altında Andrew Paul Dickey gelen, "kullanıcı notları katkıda".

hızlı bir çözüm için size sqlite2 bağımsız çalıştırılabilir yükleyebilir ve kullanabilirsiniz.

Geçenlerde bu aynı sorunla karşılaştı ve ne olup bittiğini anladım. (Evet, tüm diğer cevaplar doğru -. Bir sürüm uyuşmazlığı sorun) bir bu sorunla karşılaşmış başkaları için faydalı olabilecek bazı ek bilgiler sağlamak için bu ilanıyla ...

Summary:

Hata (SQLite sürüm 3 uygular) sqlite3.exe komut satırı aracı, (SQLite sürüm 2 uygular) SQLite PHP'nin usul arayüzünü kullanarak oluşturulan veritabanı dosyaları okuyamıyor olmasından kaynaklanmaktadır.

Discussion:

SQLite PHP tutorial (Windows XP üzerinde PHP 5.2.14 çalıştırıyorum Not): PHP ile SQLite nasıl kullanılacağını açıklayan bir öğretici takip ediyorum. Olarak çıkıyor PHP 5.2 SQLite veritabanı yönetim sistemi ile arabirim iki (uyumsuz) yolları vardır; Bir prosedür API (SQLite) ve bir nesne yönelimli API (SQLite Functions (PDO_SQLITE)). Usul API SQLite sürüm 2 kullanır ve OOP API SQLite sürüm 3 kullanan Windows PHP platformlar için, usul API bu satırı uncommenting etkindir php.ini.:

extension=php_sqlite.dll

OOP API bu satırları uncommenting etkinken:

extension=php_pdo.dll
extension=php_pdo_sqlite.dll

Olanak sağlayan ücretsiz bir Win32 araç olduğunu unutmayın yönetim ve SQLite veritabanları herhangi bir sürümünün manipülasyon: SQLite Administrator. Bu araç, bir sqlite3.exe komut satırı aracını kullanarak okunabilir bir sürümü 3 veritabanına bir sürümü (PHP usul API ile oluşturulan) 2 veritabanı dönüştürmek sağlar.

Soru iki yaşında ama şimdi bu şekilde çözülebilir:

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

Neden db iki kez açabilirim?

Bu kodu deneyin:

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

Edit: Fin muhtemelen doğru; belki) phpinfo ile SQLite sürüm (kontrol etmelisiniz.

Bu sorunu çözmek için bir daha basit bir yolu var. Sen 3 sqlite sqlite için 2 veritabanı dosyası dönüştürebilirsiniz. Yaptım Mac OS X'te SQLiteManager programı ile