Ca commence mal php :-(

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Ca commence mal php :-(

par caroube » 03 avr. 2008, 18:28

retourne une ligne de résultat mais je vois pas trop pourquoi sa n'a pas marché
Parce que tu n'as pas bien lu le message d'erreur qui disait que la fonction mysql_fetch_rows n'existe pas.

Code : Tout sélectionner

mysql_fetch_rows mysql_fetch_row
Les messages d'erreurs ne sont pas là uniquement pour dire "il y a une erreur". Ils sont également (et généralement) là pour dire de quelle erreur il s'agit.

Quand à mysql_result, elle prend obligatoirement deux arguments. Et même si ta requête ne retourne qu'une seule ligne, il faut que tu lui indiques celle que tu veux lire. C'est con, mais c'est comme ça.

par kindzo » 02 avr. 2008, 22:25

Bon je viens de passer une bonne 1/2 heure à réfléchir au mysql_fetch_row et mysql_result
Donc à priori




mysql_fetch_row : retourne une ligne de résultat mais je vois pas trop pourquoi sa n'a pas marché car sa retourne des valeurs sous forme de tableau indexé





mysql_result : retourne une champ d'un résultat donc j'ai eut

Code : Tout sélectionner

Warning: Wrong parameter count
car count (*) from... compte tous les champs de la table ?! sans indice
Je pense que faire mysql_result($reponse, 0) dennera le résultat du comptage de la première colonne du tableau donc l'ID.

pfffff je patauge et je m'embrouille en fait :oops:

par Invité » 02 avr. 2008, 12:59

Ok je vais étudier ça. La je suis au travail donc je vois ça ce soir.

J'ai bien noté, je laisse tombé les ' .
Merci pour les lien et le code je vais m'en servir et je vais étudier le truc.

Merci à vous a ce soir

par caroube » 02 avr. 2008, 10:30

Il est complètement absurde d'utiliser select * et mysql_num_rows() pour connaître le nombre de lignes d'une table. En effet, imaginons que ta table contienne 500.000 lignes avec chaque champ qui fait 1000 octets (un id, nom, un prénom, une adresse, un numéro de téléphone ...).
Lorsqu'il reçoit "select * from ...", le moteur de base de données va lire toutes ces informations dans la base et les stocker en mémoire du serveur en attendant qu'elles soient récupérées par le programme PHP : donc grosso modo 470 Mo de lecture dans la base, 470 Mo d'écriture dans la mémoire du serveur et 470 Mo de stockage dans un tableau temporaire pour ne se servir que d'une seule valeur : le nombre de lignes du tableau.

Amélioration 1 : Si tu tiens absolument à mysql_num_rows, fais select id from ... Au moins tu passeras de 470 Mo de lecture/écriture/stockage à 3 Mo (un id en INT est sur 7 octets).

Amélioration 2 : Ensuite, oui, il faut bien faire un select count (*). Parce que toute base de données normalement constituée stocke quelque part le nombre de lignes de chaque table. Ou alors, parcours rapidement la table (ou un index) et incrémente un compteur. Il n'y a donc aucune lecture du contenu de la table et la valeur retournée et mise à disposition de PHP est un simple nombre. On passe donc de 470 Mo à 7 octets. Ca vaut le coup d'un peu creuser la manière de récupérer le select count (*), non ?
mysql_connect("localhost", "root", ""); 
mysql_select_db("mabase"); // Sélection de la base mabase 

$reponse = mysql_query("SELECT count(*) FROM abonne"); // Requête SQL 
$donnees = mysql_result($reponse, 0); 
echo "La table comporte ".$donnees." enregistrement(s)."; 
mysql_close(); // Déconnexion de MySQL
Note 1 : laisse tomber les ` autour du nom des tables ou des champs.
Note 2 :

Code : Tout sélectionner

Fatal error: Call to undefined function mysql_fetch_rows() in C:\wamp\www\test.php on line 17
Lit bien la doc ici pour voir pourquoi mysql_fetch_rows n'existe pas
Note 3 :

Code : Tout sélectionner

Warning: Wrong parameter count for mysql_result() in C:\wamp\www\test.php on line 17
Lit bien la doc ici pour voir pourquoi il n'y a pas le bon nombre de paramètres à mysql_result

par kindzo » 01 avr. 2008, 23:31

Merci à vous 2.

avec mysql_num_rows :
mysql_connect("localhost", "root", "");
mysql_select_db("mabase"); // Sélection de la base mabase

//$table = "abonne";
//$dep = "departement";
//$res = "24";
$reponse = mysql_query("SELECT * FROM `abonne`"); // Requête SQL
$donnees = mysql_num_rows($reponse);
echo "La table comporte ".$donnees." enregistrement(s).";
mysql_close(); // Déconnexion de MySQL
j'obtiens :

Code : Tout sélectionner

La table comporte 11 enregistrement(s).
ENCORE MERCI A VOUS

par Aureusms » 01 avr. 2008, 23:20

Alors pour compter les lignes retournées c'est mysql_num_rows et pas mysql_fecth_rows.

Ensuite essaye de compter le nombre de ligne et non de faire un count(); (à mon avis)
$requete = "SELECT * FROM `mabase`";
$resultat_sql = mysql_query ($requete);
$nombre_de_ligne = mysql_num_rows($resultat_sql);
Toutes commandes avec fetch a l'intérieur c'est (en gros) pour les sorties vers des tableaux. :
mysql_fecth_row -> tableau numérique
mysql_fecth_assoc -> tableau associatif
mysql_fecth_array -> les deux.

par kindzo » 01 avr. 2008, 23:11

merci de m'avoir répondu

j'a essayé ça :
mysql_connect("localhost", "root", "");
mysql_select_db("mabase"); // Sélection de la base mabase

//$table = "abonne";
//$dep = "departement";
//$res = "24";
$reponse = mysql_query("SELECT COUNT( * ) FROM `abonne`"); // Requête SQL
$donnees = mysql_result($reponse);
echo "La table comporte ".$donnees." enregistrement(s).";
echo $reponse;
mysql_close(); // Déconnexion de MySQL
j'ai obtenu ça

Code : Tout sélectionner

Warning: Wrong parameter count for mysql_result() in C:\wamp\www\test.php on line 17 La table comporte enregistrement(s).Resource id #3
puis j'ai tenté ça :
mysql_connect("localhost", "root", "");
mysql_select_db("mabase"); // Sélection de la base mabase

//$table = "abonne";
//$dep = "departement";
//$res = "24";
$reponse = mysql_query("SELECT COUNT( * ) FROM `abonne`"); // Requête SQL
$donnees = mysql_fetch_rows($reponse);
echo "La table comporte ".$donnees." enregistrement(s).";
echo $reponse;
mysql_close(); // Déconnexion de MySQL
et làj'ai eut ça :

Code : Tout sélectionner

Fatal error: Call to undefined function mysql_fetch_rows() in C:\wamp\www\test.php on line 17
j'ai la pouasse !

par Jules Petibidon » 01 avr. 2008, 23:01

Salut,

mysql_num_rows() te donne le nombres de lignes renvoyées par ta requete. En l'occurrence, une ligne.

Regarde du côté de mysql_result() ou mysql_fetch_row() pour récupérer le résultat de ta requete (qui lui contiendra 11)

Bon courage ! :)

Ca commence mal php :-(

par kindzo » 01 avr. 2008, 22:51

Bonjour à toutes et à tous

Voila je commence à bricoler en php et je tombe dessuite sur un os. J'ai installé wamp5. je bricole vite fais une petite base avec phpmyadmin, je fais une requète que je croyais simple :
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("mabase"); // Sélection de la base mabase

$reponse = mysql_query("SELECT COUNT( * ) FROM `abonne`"); // Requête SQL
$donnees = mysql_num_rows($reponse);
echo "La table comporte ".$donnees." enregistrement(s).";
mysql_close(); // Déconnexion de MySQL
?>
ben non je me casse les dents dessus !!!
j'obtiens 1 alors qu'il y en a 11. J'ouvre phpmyadmin, je vais dans l'onglet SQL, je fais ceci :
SELECT COUNT( * ) FROM `abonne` LIMIT 0 , 30

et j'obtiens 11.

donc $donnees = 1
et $reponse = Resource id #3

s'il vous plait pourriez-vous m'aider ?