probleme count et mysql_fetch_row(

yadutonus
Invité n'ayant pas de compte PHPfrance

17 déc. 2010, 11:59

bonjour, j'essaie de faire le decompte de toutes les entrées d'une recherche dans ma BDD, pour utiliser une fonction d'affichage de changement de pages.

mon code permet de generer une requete mysql qui fonctionne lorsque je execute directement dans la console. et me donne le nombre d'entrées.

quand j'essaie de l'uliser dans mon code php j'ai une erreur :


Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /homepages/5/d267378681/htdocs/search.php on line 132
dans la ligne.
$row = mysql_fetch_row($result_id);
$total = $row[0];

Et je n'arrive pas a m'en sortir !!

Merci pour votre aide.

ViPHP
ViPHP | 5462 Messages

17 déc. 2010, 12:00

hello, t'as une erreur dans ta requête, active le mysql.trace_mode
ini_set('mysql.trace_mode', true);

ya du tonus
Invité n'ayant pas de compte PHPfrance

17 déc. 2010, 18:28

j'ai bien mis
ini_set('mysql.trace_mode', true);
au début de la page mais aucun message n'apparaît.

impossible de comprendre pour quoi la variable result_id n'est pas le bon argument pour mysql_fetch_row()

je vous donne une grande partie du code. avec la fonction de moteur de rercherche
<?php function requete($table, $champs, $select, $order, $sens, $limit_start, $limit_nb, $count = '')
   {
   // option de recherche
	   $option = $_GET['option'];
	   // texte de recherche
	   $search = $_GET['search'];
  
   // si c'est le premier appel de la fonction
   if(!isset($fonction_requete))
   {
   static $fonction_requete = 1;
  
   // si "Rechercher tous les mots" ou "Rechercher un de ces mots"
   if($option == 'all' || $option == 'one')
   {
   // liste des mots
   $mots = explode(' ', $search);
  
   // sépararateur
   if($option == 'all')
   $sep = ' AND ';
   else
   $sep = ' OR ';
   } // if($option == 'all' || $option == 'one')
   // "Rechercher l'expression exacte"
   else
   {
   $mots = $search;
   $sep = '';
   }
   } // if(!isset($fonction_requete))
  
   if(!is_array($champs))
   $champs = array($champs);
  
   if($option == 'all' || $option == 'one')
   {
   // pour savoir si on en est à la première itération ou non
   $i = 0;
  
   // pour tous les mots
   foreach($mots as $mot)
   {
   if(!$i)
   {
   $search = '~  ^!|!^  ~ LIKE \'%' . $mot . '%\'';
   $i = 1;
   }
   else
   $search .= $sep . '~  ^!|!^  ~ LIKE \'%' . $mot . '%\'';
   } // foreach($mots as $mot)
   } // if($option == 'all' || $option == 'one')
   else if($option == 'sentence')
   $search = '~  ^!|!^  ~ LIKE \'%' . $mots . '%\'';
  
   $i = 0;
  
   // début de requête
   if(empty($count))
   $req_search = 'SELECT ' . $select . ' FROM ' . $table . ' WHERE ';
   else
   $req_search = 'SELECT count(' . $count . ') FROM ' . $table . ' WHERE ';
  
   // ajout des champs
   foreach($champs as $champ)
   {
   if(!$i)
   {
   $req_search .= '( ' . str_replace('~  ^!|!^  ~', $champ, $search) .' ) ';
   $i = 1;
   }
   else
   $req_search .= 'OR ( ' . str_replace('~  ^!|!^  ~', $champ, $search) .' ) ';
   }
  
   if(empty($count))
   $req_search .= "ORDER BY $order $sens LIMIT $limit_start, $limit_nb";
  
   return $req_search;
   } 
   
   
  
   
  try
{
	// On se connecte à MySQL
	$bdd = new PDO('mysql:host=localhost;dbname=admin', 'xxx', 'xxx');
}
catch(Exception $e)
{
	// En cas d'erreur, on affiche un message et on arrête tout
        die('Erreur : '.$e->getMessage());
}






$table= 'stock' ;
$champs= array('ref','auteur','titre', 'description','commentaire','prix');
$select= 'ref, auteur, titre, description, commentaire, prix';

$order='ref';
$sens= 'DESC';

include ("fct_page.php");

# $count: paramètre optionnel: Si est vide ou non-passé, la requête est crée normaleme

//on rajoute ces infos avant sa requete
$d = $_GET['d'];
if(!isset($_GET['l'])) $_GET['l']=4; //pour avoir que 4 enregistrements par page par exemple
if(!isset($_GET['d'])) $_GET['d']=0;  //on affiche en premier l'enregistrement 0 (le premier) par défaut




$limit_start = $_GET['d'];
$limit_nb=$_GET['l'];

$requete = requete($table, $champs, $select, $order, $sens, $limit_start, $limit_nb); 
$result = $bdd->query($requete); 
   
   $requete_id = requete($table, $champs, $select, $order, $sens, $limit_start, $limit_nb,'*'); 
   
   $result_id = $bdd->query($requete_id); 
  
  
   
   
   
   
$row = mysql_fetch_row($result_id);
$total = $row[0];




   
   $barrenavig = gestion_pages($_GET['d'],$_GET['l'],$total,$search,$option);
   
   
   ?>

Eléphant du PHP | 209 Messages

18 déc. 2010, 08:36

Je rêve ou tu mélange PDO et mysql ?
--
Eric

yadutonus
Invité n'ayant pas de compte PHPfrance

18 déc. 2010, 10:02

C'est un script que j'ai essayé d'adapter je débute. Merci de m'eclairer .

Eléphant du PHP | 209 Messages

18 déc. 2010, 10:26

Ok, en fait, il existe plusieurs bibliothèques pour accéder à MySQL :

- l'extention MySQL : http://www.php.net/manual/fr/book.mysql.php
- l'extention MySQLi : http://www.php.net/manual/fr/book.mysqli.php
- l'extention PDO : http://www.php.net/manual/fr/book.pdo.php

Tu dois choisir une de ces extensions et t'y tenir. Je te conseille de commencer par MySQL qui est plus simple et te fera saisir
la philosophie du truc, même si dans la vrai vie, c'est plutôt PDO qui est utilisé.
--
Eric