Autor Zpráva
lqs
Profil *
Ahoj, snazim se pomoci PHP tahat data z SQlite3 databaze.
Kdyz pouziju:
<?php
$jmenoDB = sqlite_open("tz.sqlite");
$dotaz = sqlite_query($jmenoDB, 'SELECT location FROM tz');
while ($dataDB = sqlite_fetch_array($dotaz, SQLITE_ASSOC)) {
    echo $dataDB['location']. '<br />';
}
?>
tak to funguje.

<?php
  try
  {    
    $db = new PDO('sqlite:tz.sqlite'); //open the database
        echo 'Connected to database<br />';
    $dotaz = $db->query("SELECT location, string FROM tz");
    foreach ($dotaz as $row)
        {
        print $row['location'] . $row['string'] . '<br />';
        }    
    $db = NULL; // close the database connection
  }
  catch(PDOException $e)
  {
    print 'Exception : '.$e->getMessage();
  }
?>
Kdyz ale chci pouzit PDO, tak to hlasi chybu:
Connected to database

Warning: Invalid argument supplied for foreach() in /data/web/test/index2.php on line 7
Nevite, kde delam chybu?

A jeste jeden dotaz. Nekde na webu jsem cetl, ze na SQlite3 se musi pouzit PDO. Mne to ale jde i bez nej. Jak to teda je?
DnD
Profil
napadá mě, že $dotaz je prázdný, pak to zahlásí invalid argument.
Tak bych hledal chybu ve vytvoření PDO objektu (proč se vždy vypisuje connected, nechtělo by to nějak ověřit?) anebo v prázdné tabulce.
Tori
Profil
Co se vypíše, když za ř.6 přidáte var_dump($db->errorinfo());?
lqs
Profil *
2:
Mam tam
echo 'Connected to database<br />';


3:
...
    $dotaz = $db->query("SELECT location, string FROM timezone");
var_dump($db->errorinfo());
    foreach ($dotaz as $row)
    ...
Mi vypise:
Connected to database
array(3) { [0]=> string(5) "HY000" [1]=> int(26) [2]=> string(38) "file is encrypted or is not a database" } 
Warning: Invalid argument supplied for foreach() in /data/web/virtuals/5925/virtual/www/subdom/martin/test/index2.php on line 8

V obou pripadech pouzivam stejny DB soubor se stejnymi daty.

Kdyz pouziju sqlite_open vystup je takovyto:
Africa/Abidjan<br />Africa/Accra<br />Africa/Addis Ababa<br />Africa/Algiers<br />Africa/Asmara<br />Africa/Bamako<br />Africa/Bangui<br />Africa/Banjul<br />Africa/Bissau<br />Africa/Blantyre<br />Africa/Brazzaville<br />.....
Mike8748
Profil
lqs:
napadá mě náhodou ta databáze není uložená ve formátu SQLite 2? je možné že máš v php PDO podporu pouze pro verzi 3, proto to nejde
lqs
Profil *
DB je 100% sqlite3
Ugo
Profil
lqs:
no já bych si tak 100% jist nebyl, sqlite_open() a funkce tohoto rozšíření pracují s sqlite2, pro sqlite3 je třída sqlite3.

- ověřit samozřejmě můžeš zobrazenim databáze v textovym formátu, na začátku souboru bude určení typu
lqs
Profil *
Tak jsem to overoval DB je 100% v sqlite3 formatu a phpinfo ma take podporu:
$ head timezone.sqlite | hexdump -C
00000000  53 51 4c 69 74 65 20 66  6f 72 6d 61 74 20 33 00  |SQLite format 3.|
...


<?php

$jmenoDB = sqlite_open("timezone.sqlite");

$dotaz = sqlite_query($jmenoDB, 'SELECT location FROM tz');
while ($dataDB = sqlite_fetch_array($dotaz, SQLITE_ASSOC)) {
    echo $dataDB['location']. '<br />';
}

?>
a dostanu:
Fatal error: Call to undefined function sqlite_open() in /data/web/test/index.php on line 3
uplne ten samy index.php a timezone.sqlite na wedos hostingu funguje, u me na localhostu ale ne, kde muze byt chyba?
Mike8748
Profil
funkce sqlite_open je pro SQLite verzi 2, a potřebuje nainstalované rozšířeni SQLite (na windows soubor php_sqlite.dll)
tvůj fatal error znamená že to rozšíření na localhostu povolené nemáš (pouze SQLite 3), na wedosu to nainstalované je.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: