Page 1 sur 1
Je comprend pas bien PDO
Posté : 08 déc. 2006, 12:04
par Maitrepylos
Bonjour,
J'esaye de suivre les tutos se trouvant sur le net, mais je ne comprend pas bien les erreurs de sortie.
J'ai la class suivante :
<?php
class motsCaches {
function __construct()
{
$bdd = new PDO('sqlite:../sqlite/basedb.sqlite');
$sql ="SELECT motssolution FROM motsphrase";
$result = $bdd->query($sql);
$laTotal = $result->fetchAll();
echo"<pre>";
var_dump($laTotal);
echo"</pre>";
}
}
?>
Puis j'instancie cette class
<php
$objet = new motsCaches();
?>
J'obtient l'erreur suivante
Code : Tout sélectionner
Fatal error: Call to a member function fetchAll() on a non-object
Pourtant j'ai bien Pdo, installer par Pecl sur php 5.1
Merci de votre aide
Posté : 08 déc. 2006, 15:16
par Ajoloca
Bonjour,
Tu es sur que ta connexion fonctionne ?
Tu ne le testes même pas.
Avant de créer ta propre class, commence par le faire de façon procédurale
<?php
try{
$bdd = new PDO('sqlite:../sqlite/basedb.sqlite', '', '');
}
catch (PDOException $e){
die($e->getMessage());
}
$sql ="SELECT motssolution FROM motsphrase";
if(($result = $bdd->query($sql)) !== false){
$laTotal = $result->fetchAll();
echo"<pre>";
var_dump($laTotal);
echo"</pre>";
}
else{
die('ERR_SQL');
}
?>
Posté : 08 déc. 2006, 15:26
par Maitrepylos
Salut,
J'avais tester auparavant ma connection.
En suivant ta proposition, j'obtient 'ERR_SQL'
Je ne comprend pas pourquoi il refuse de faire l'action?
Posté : 08 déc. 2006, 15:32
par Ajoloca
Re,
Ajoute ces lignes, elles te donneront plus de précisions.
else{
echo"<pre>";
print_r($bdd->errorInfo());
echo"</pre>";
die('ERR_SQL');
}
Posté : 08 déc. 2006, 15:51
par Maitrepylos
heu
Code : Tout sélectionner
Array
(
[0] => HY000
[1] => 26
[2] => file is encrypted or is not a database
)
je confirme que ma base existe.
Sur le net il parle d'une version spécial sqlite3 pour pdo?
Posté : 08 déc. 2006, 15:55
par Ajoloca
Re,
Il y a actuellement deux versions majeures de SQLite, la 2 et la 3
Les drivers de connexion ne sont pas les mêmes
Pour la 2 $dns = 'sqlite2:.....'
Pour la 3 $dns = 'sqlite:.....'
Le message d'erreur te dis que ton fichier est crypté ou bien c'est pas un fichier base de données (SQLite).
Posté : 08 déc. 2006, 16:08
par Maitrepylos
Oui effectivement j'ai le driver pour Pdo_Sqlite3, mais je possède sqlite 2.8, je vais voir comment upgrader ce sqlite vers le 3.
Merci de ton aide.
MaitrePylos
Posté : 08 déc. 2006, 16:15
par Ajoloca
Re,
Tu utilises quel OS ? (@Albat : Pas de tibia, sinon c'est la barre de ...)
Posté : 08 déc. 2006, 16:25
par Maitrepylos
Je suis sous Dapper/Server.
Et il n'ont pas encore fais la mise à jour vers Php 5.2
Posté : 08 déc. 2006, 16:30
par Ajoloca
Je suis sous Dapper/Server.
Et il n'ont pas encore fais la mise à jour vers Php 5.2
Je ne connais pas du tout!, je savias même pas que ça existait.
Pour revenir à ton PB, change le DSN, essaie ceci
$bdd = new PDO('sqlite2:../sqlite/basedb.sqlite', '', '');
Si ça ne marche pas tu devras utiliser, soit les fonctions clasiques (sqlite_*) très proches de celles de MySQL ou bien les class SQLite.
Posté : 12 déc. 2006, 16:48
par Maitrepylos
Effectivement, je n'arrive pas à utiliser le PDO, pour sqlite, parce que Pear/Pecl ne travaille que sur sqlite3.
Bon ben j'attendrais une mise à jour majeur de mon OS pour pouvoir apprendre.
Merci de ton aide