Sqlite via PDO + PHP5

Eléphanteau du PHP | 24 Messages

09 oct. 2008, 23:10

Bonsoir,

J'ai un soucis avec php5, pdo et sqlite :

Je passe les détails du CREATE TABLE...

Code : Tout sélectionner

$pageVisit = "machin"; $dbHandle = new PDO('sqlite:truc.sqlite3'); $sqlGetView = 'SELECT count(page) AS view FROM pageView WHERE page = '.$pageVisit.''; $result = $dbHandle->query($sqlGetView); $pageView = $result->fetch();
Ma table existe mais elle est vide. Et j'obtiens le message :
Fatal error: Call to a member function fetch() on a non-object in ... on line XX

Savez-vous pourquoi ?

Merci.

ViPHP
ViPHP | 3607 Messages

09 oct. 2008, 23:19

Et si tu essaye d'afficher les erreurs avec $dbHandle->errorInfo() ?

Eléphanteau du PHP | 24 Messages

09 oct. 2008, 23:23

Comment je l'utilises ? Je connais pas bien PDO (encore moins sqlite).

ViPHP
ViPHP | 4039 Messages

09 oct. 2008, 23:25

Note que tu n'es pas obligé de passer par pdo. PHP5 inclut sqlite en natif.

(quelques fonctions et descriptions: http://be.php.net/manual/fr/book.sqlite.php )
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
ViPHP | 3607 Messages

09 oct. 2008, 23:26

http://php.net/pdo :-*

Sinon tu faits
<?php echo $dbHandle->errorInfo();
// ou
echo $result->errorInfo();
?>
tout dépend ou se situe l'erreur... (là je penche pour la deuxième solution ;) )

Eléphanteau du PHP | 24 Messages

09 oct. 2008, 23:56

Note que tu n'es pas obligé de passer par pdo. PHP5 inclut sqlite en natif.

(quelques fonctions et descriptions: http://be.php.net/manual/fr/book.sqlite.php )
Oui mais la version 3 ne se gère que via PDO (si j'ai bien compris).
tout dépend ou se situe l'erreur... (là je penche pour la deuxième solution ;) )
C'est bien ce qui me semblait mais cela ne m'affiche rien.
En fait comme ça produit une erreur fatale, le reste de la page n'est pas affiché.

Voilà un code complet que vous pouvez tester :

Code : Tout sélectionner

// create a SQLite3 database file with PDO and return a database handle (Object Oriented) try{ $dbHandle = new PDO('sqlite:test.sqlite3'); }catch( PDOException $exception ){ die($exception->getMessage()); } // create page view database table $sqlCreateTable = 'CREATE TABLE pageView(id INTEGER PRIMARY KEY AUTOINCREMENT, page CHAR(256), access INTEGER(10))'; $dbHandle->exec($sqlCreateTable); // remove or 'comment out' this line after first run // insert page visit in database with a prepared statement /*$sqlInsertVisit = 'INSERT INTO pageView (page, access) VALUES (:page, :access)'; $stmt = $dbHandle->prepare($sqlInsertVisit); $stmt->bindParam(':page', $_SERVER['PHP_SELF'], PDO::PARAM_STR); $stmt->bindParam(':access', time(), PDO::PARAM_INT); $stmt->execute();*/ // get page views from database $pageVisit = $dbHandle->quote($_SERVER['PHP_SELF']); $sqlGetView = 'SELECT count(page) AS view FROM pageView WHERE page = '.$pageVisit.''; $result = $dbHandle->query($sqlGetView); $pageView = $result->fetch(); // store result in array // print page views echo 'This page has been viewed '.$pageView['view'].' times.';

ViPHP
ViPHP | 3607 Messages

10 oct. 2008, 11:04

Fait un echo de ta requête select pour voir?
et test là ds phpmyadmin directement...

Eléphanteau du PHP | 24 Messages

10 oct. 2008, 11:30

Oui je l'ai fait mais ma requête est bonne. Et phpmyadmin c'est pour mysql, pas sqlite ;)

Bon enfin dommage je voulais essayer sqlite mais du coup j'ai refait ma petite table sous mysql et avec le même code (à part la phase de connexion bien sûr) et là aucun soucis...

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

10 oct. 2008, 12:39

Es-tu certain que la connection à la DB se passe bien ?
Sinon, tu as http://www.sqlitemanager.org/ qui te permet d'avoir un frontend pour SQLite
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphanteau du PHP | 24 Messages

10 oct. 2008, 13:11

Oui, il suffit d'avoir au moins une ligne de données dans la table pour que l'erreur ne se produise plus...