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 :cry:

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