Page 1 sur 1

[Poo / MySql] Erreur bizarre

Posté : 10 janv. 2006, 03:29
par endorphine
Bonjour,
Je me fait une class pour le connecter à MySql, afficher des données, ajouter, update etc...
J'ai une erreur dont je ne connais pas la source. :shock:

Voici mon code :
<?php

class connect {
 public $connect;
 public $query;

 public function __construct($host, $user, $password, $database) {
  $this->connect = mysql_connect($host, $user, $password);
  mysql_select_db($database, $this->connect);
 }

 public function query($query, $i = '0') {
  $this->query[$i] = mysql_query($query, $this->connect);
 }

 public function fetch($i = '0', $type = 'object') {
  switch ($type)
  {
   case 'row':
    $fetch = mysql_fetch_row($this->query[$i]);
   break;

   case 'array':
    $fetch = mysql_fetch_array($this->query[$i]);
   break;

   case 'assoc':
    $fetch = mysql_fetch_assoc($this->query[$i]);
   break;

   case 'object':
    $fetch = mysql_fetch_object($this->query[$i]);
   break;
  }
  return $fetch;
 }

 public function close() {
  mysql_close($this->connect);
 }
}

// CETTE PARTIE EST SIMPLEMENT LÀ POUR TESTER LA CLASSE


function nl2p($str,$addtag='') {
   return str_replace('<p'.$addtag.'></p>', '', '<p'.$addtag.'>' . preg_replace('#\n|\r#', '</p>$0<p'.$addtag.'>', $str) . '</p>');
}

require_once("config.php");
$db = new connect( $host, $user, $password, $database );
$db->query("SELECT * from nouvelles ORDER BY 'id' DESC LIMIT 10");
$db->query("SELECT * from nouvelles ORDER BY 'id' DESC LIMIT 1", 1);
$db->query("UPDATE `nouvelles` SET `auteur` = 'endorphine!!!!' WHERE `id` = 31 LIMIT 1", 2);
$db->fetch(2, 'assoc');
$db->close();

 while ($r = $db->fetch()) {
  echo "<h2>" . $r->titre . "</h2>\n";
  echo nl2p($r->nouvelle) . "\n\n";
 }

echo "<br />";
echo "<hr />";
echo "<br />";

 $r = $db->fetch(1);
  echo "<h2>" . $r->titre . "</h2>";
  echo "<p>" . nl2br($r->nouvelle) . "</p>";

?>
Voici l'erreur :
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\connect.php on line 28
Merci d'avance pour votre aide!!

Posté : 10 janv. 2006, 11:33
par jeff
salut
est tu sur que tes requete renvoi quelque chose :?:

et pourqoi fait tu un fetch sur une requete Update :?:

Posté : 10 janv. 2006, 11:42
par Vianney
Juste une autre petite question qui doit pas avoir grand chose avec ton probleme mais bon...
public function fetch($i = '0', $type = 'object') 
switch ($type)
  { 
etc...
$r = $db->fetch()
Pourquoi tu mets un switch si tu définis dans l'appel de la fonction fetch la valeur de $type? :roll:

et ton $i sert a quoi d'ailleur?
query[$i] ???

juste pour comprendre la logique de ton truc :)

Posté : 10 janv. 2006, 11:50
par jeff
pour
$type = 'object'
tu pourrai utiliser le default du switch
et l'indice $i permet de recupere la bonne ressource renvoyer par mysql

comme ca tu exploite tes requete dans l'odre que tu veut et tu peut auusi les imbriquer

Posté : 10 janv. 2006, 12:11
par Vianney
Ah oki je vois ca évite de créer plusieur oject mysql a chaque requette imbriquer. Merci je vois quoi maintenant.

je savais pas qu'on pouvais faire ca pour $i
public function query($query, $i = '0') {
  $this->query[$i] = mysql_query($query, $this->connect);
}
...
$db->query("SELECT * from nouvelles ORDER BY 'id' DESC LIMIT 1", 1);
Comment faut comprendre ca? que par defaut la valeur de $i est 0 mais qu'on peut le changer c'est ca?

Posté : 10 janv. 2006, 12:13
par jeff
ouia
mais ca devrai etre plutot ca
public function query($query, $i =0) { 

Posté : 11 janv. 2006, 03:38
par endorphine
Salut,
désoler pour le retard (je viens du Québec)
salut
est tu sur que tes requete renvoi quelque chose Question

et pourqoi fait tu un fetch sur une requete Update Question
Merci, le problème était là... erreur stupide.. désoler pour le dérangement !! :shock: Je crois que j'étais trop concentré sur le problème pour m'en rendre compte...


Explication pour le $i :
En fait je voulais me simplifier un peu la vie, disons qu'au début d'un script je fait plein de requête. Bha pour les afficher ça causait un problème car Php n'affiche pas nécessairement celle qu'on veut!
Exemple concret :
require_once("config.php");
$db = new connect( $host, $user, $password, $database );
$db->query("SELECT * from nouvelles ORDER BY 'id' [b]DESC[/b] LIMIT 1");
$db->query("SELECT * from nouvelles ORDER BY 'id' [b]ASC[/b] LIMIT 1");

$r = $db->fetch();
  echo "<h2>" . $r->titre . "</h2>\n";
  echo $r->nouvelle . "\n\n";
$db->fetch();
  echo "<h2>" . $r->titre . "</h2>\n";
  echo $r->nouvelle . "\n\n";
Affichera 2 fois la première nouvelle entrée. (J'ai essayé d'être le + clair dans mes explications :P)

Merci encore!

Posté : 11 janv. 2006, 03:40
par endorphine
Ah oui, j'ai aussi oublié de spécifier que $i = '0', car lorsqu'il n'y a qu'une requête pas besoin d'ajouter un chiffre à la fin, ça se fait automatiquement!

(Je crois que je vais m'enregistrer ça va éviter du spam) :roll: