[Poo / MySql] Erreur bizarre

endorphine
Invité n'ayant pas de compte PHPfrance

10 janv. 2006, 03:29

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!!

Mammouth du PHP | 1311 Messages

10 janv. 2006, 11:33

salut
est tu sur que tes requete renvoi quelque chose :?:

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

Eléphant du PHP | 161 Messages

10 janv. 2006, 11:42

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

Mammouth du PHP | 1311 Messages

10 janv. 2006, 11:50

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

Eléphant du PHP | 161 Messages

10 janv. 2006, 12:11

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?

Mammouth du PHP | 1311 Messages

10 janv. 2006, 12:13

ouia
mais ca devrai etre plutot ca
public function query($query, $i =0) { 

endorphine
Invité n'ayant pas de compte PHPfrance

11 janv. 2006, 03:38

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!

endorphine
Invité n'ayant pas de compte PHPfrance

11 janv. 2006, 03:40

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: