Fonction SELECT pour MySQL ?

Macou
Invité n'ayant pas de compte PHPfrance

01 févr. 2006, 05:54

Coucou, je suis un grand débutant en PHP et tout ça (en fait, j'en suis au stade de faire des tutoriaux d'un bouquin que j'ai acheté, c'est dire..), que j'apprend parce que je dois faire un site pour une assoce. Alors bon, j'essaye de faire bien..

Le problème est le suivant: j'ai à peu près compris comment fonctionnait MySQL, que c'est des bases de données sous forme de tableau, que c'est très pratique etc., je me suis donc mis aux applications, après avoir à peu près acquis le principe.
j'ai donc créé une base de donnée, sur mon ordi, qui s'appelle testotron, dans lequel j'ai inséré les champs clef (qui s'incrémente de 1 à chaque entrée), prénom, nom, ville etc., qui a 2 lignes (faut pas trop compliquer au début hein ! donc clef=1, et clef=2, et c'est tout, et clef est "l'index" -pas trop compris ça, mais bon)

ENSUITE, je crée un fichier php de connexion:

$dbname = 'testotron';
$hostname = 'localhost';
$username = 'root';
$password = '';
$idlink = mysql_connect($hostname, $username, $password);
echo $idlink;
//j'ai mis echo à la dernière ligne pour voir la valeur que ça renvoyait, et ça me renvoie: Resource id #2
et puis, comme je suis lancé j'en profite, dans le même fichier je continue avec un bout de script pompé sur le bouquin que j'ai acheté:
$sql = "SELECT clef FROM testotron";
//là, j'ai testé un peu tout, j'ai mis des WHERE et tout puisque je comprend ni à quoi sert la commande précisément (à part sélectionner un bout de la bdd, mais ça m'en dit pas plus ! et toujours le même résultat, voir juste en dessous
$resultat = mysql_db_query($dbname,$sql,$idlink);
echo $resultat;
//et c'est là que ça me perturbe: ça echo rien du tout !
$nombre = mysql_num_rows($resultat);
echo $nombre;
//et là c'est le drame: "Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\index.php on line 19"  :cry:
// J'ai essayé avec la fonction mysql_fetch_array, ça donnait le même résultat
Donc pour faire bref, j'aimerais savoir quelle genre de valeur doit renvoyer la fonction SELECT quand on la query à la bdd ! Est ce que j'ai fait une erreur dans le script ? Aidez moi S'il vous plait ! :D

Mammouth du PHP | 19672 Messages

01 févr. 2006, 07:49

Mouais, ben c'est un bon début. Quelques explications préliminaires :

l'index dont tu parles se nomme une clé primaire : c'est un champ dans la table qui ne pourrais pas contenir plus d'une fois la même valeur. En ayant un champ de type INT en auto_increment, tu règles effectivement ce problème. Cette clé te sert essentiellement de point de repère afin de pointer sur la bonne ligne au besoin.

Lorsque tu fais un echo() pour voir ce que retourne mysql_connect, ça affiche "Resource #xyz", c'est normal, c'est la ressource de connexion à laquelles les fonctions mysql suivantes vont faire référence pour fonctionner.

Ensuite on sélection la base. puis on exécute la requête : c'est là que tu as pris un raccourci saisissant qui t'a fait obtenir un warning. mais note bien que le warning en question indique l'appel à la fonction mysql_num_rows() : ça signifie que le rélsutat retourné par mysql_db_query() a retourné une erreur. L'erreur est d'autant plus compréhensible que tu essayes de récupérer les données d'une base et non d'une table de cette base. Une base de données est constituée de 0 à x tables ayant chacune un nom différent.

Voici un schéma sommaire pour simplifier ton code :

-1- se connecter avec mysql_connect
-2- sélectionner la base (rien d'autre à ce stade)
-3- définir la requête;
-4- exécuter la requête et éventuellement récupérer le retour d'erreur;
-4- récupérer et exploiter les résultats

Reprenons ton code sur cette base, pour les besoins du moment, j'ai utilisé un nom de table quelconque, modifie la requête selon le vrai nom de ta table que je ne connais pas :
<?php
/* Définition des paramètres de connexion */
$dbname   = 'testotron';
$hostname = 'localhost';
$username = 'root';
$password = '';

/* Définition de la ressource de connexion */
$idlink = mysql_connect($hostname, $username, $password)
                 or die("<p>Connexion au serveur MySQL  ". $hostname ." impossible.<br />\nErreur retournée : ". mysql_errno($idlink) ." : ". mysql_error($idlink) ."</p>\n");

/*  Sélection de la base de données appropriée */
mysql_select_db($dbname, $idlink) 
         or die("<p>Sélection de la base de données ". $dbname ." impossible.<br />\nErreur retournée : ". mysql_errno($idlink) ." : ". mysql_error($idlink) ."</p>\n");

/* Définition de la requête à exécuter */
$sql = "SELECT clef FROM ta_table";

/* Exécution de la requête */
$resultat = mysql_query($sql, $idlink);

/* $resultat est une ressource, comme $idlink, on ne peut pas le faire afficher directement */

/* On compte les lignes retournées */
$nombre = mysql_num_rows($resultat);
echo $nombre;

/* On va afficher les résultats dans une boucle s'il y en a : */
if($nombre > 0)
{
?>
<p>
<?php
    while(true == ($ligne = mysql_fetch_assoc($resultat)))
    {
        echo($ligne['clef'] ."<br />\n");
    }
?>
</p>
<?php
}
?>
Essaye déjà avec ça et reviens-nous avec ce que tu arrives à obtenir.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Macou
Invité n'ayant pas de compte PHPfrance

01 févr. 2006, 08:38

Sélection de la base de données testotron impossible.
Erreur retournée : 1049 : Base 'testotron' inconnue
Bon, bah il veut pas me connecter à la base de données visiblement.. mais pourquoi ? :shock:
J'ai vérifié, elle existe bien..
En fait, je me demande si je me plante pas dans les termes, entre "base de donnée" et "table".. ce que j'appellais base de données était le truc qui ressemblait à ça

1 login1 mdp1 ville1
2 login2 mdp2 ville2
3 etc...

pour moi, ça c'est la base de donnée, et une table correspond à une ligne.. c'est pas ça hein ? :?

Macou
Invité n'ayant pas de compte PHPfrance

01 févr. 2006, 08:42

Mais alors, dans ce cas, j'aurais le nom de ma "table" (vu que c'est CREATE TABLE que j'ai utilisé comme commande, il semblerait effectivement que je me sois gouré dans les termes: c'est une table, pas une base de données !).. quel est le nom de ma base de données ? :?
J'ai installé EasyPHP, et j'ai créé une table grâce à PHPMyAdmin (enfin pas vraiment, je voulais tester les commandes donc je l'ai créée grâce à un fichier php, mais a priori ça revient au même)... donc quid du nom de ma "base de données" ? :?
Merci en tout cas, pour l'aide qui m'a déja permis de résoudre un problème qui se posait dans ma tête sur les commandes :wink:

Mammouth du PHP | 19672 Messages

01 févr. 2006, 08:42

Non, tu as sauté une étape :
Tu as tout en haut le serveur MySQL :
Le serveur contient des bases de données;
Chaque base contient des tables;
Dans chaque table, il y a 0 à n lignes
Chaque ligne est composée des champs et forment les colonnes.

Donc dans ce cas, par rapport au code, le nom de la table "testotron" semble correct, mais dans ce cas quel est le nom de la base que tu as forcément créé pour y créer la table testotron ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Macou
Invité n'ayant pas de compte PHPfrance

01 févr. 2006, 08:44

Bon je vais vous emmerder à poster 10 fois dans le topic, mais problème résolu: le nom de ma base était tout simplement.. mysql :lol:
Merci pour tout, je reviendrai surement vous embêter :mrgreen:

Mammouth du PHP | 19672 Messages

01 févr. 2006, 08:47

! STOP !
La base MySQL est une base système du serveur, n'y touche pas et crée d'autres bases pour tes exercices. Les paramètres de configuration de connexion au serveur, la gestion des droits d'accès et ce genre de chose sont enregistrés dans la base MySQL, il ne faut pas y mettre les doigts, d'autant moins si tu ne maîtrises pas le système.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

01 févr. 2006, 08:47

Non, tu as sauté une étape :
Tu as tout en haut le serveur MySQL :
Le serveur contient des bases de données;
Chaque base contient des tables;
Dans chaque table, il y a 0 à n lignes
Chaque ligne est composée des champs et forment les colonnes.

Donc dans ce cas, par rapport au code, le nom de la table "testotron" semble correct, mais dans ce cas quel est le nom de la base que tu as forcément créé pour y créer la table testotron ?
En fait, j'ai créé aucune base.. j'ai juste créé une table avec PHPMyAdmin.. j'avais pas compris la structure de ces bases, et je viens juste d'apprendre qu'on pouvait aussi créer des bases qui contenaient des tables, au lieu de simplement créer des tables dans une base préexistente !
Hum.. le chemin qui mène à la programmation PHP semble encore bien long :mrgreen:

Invité
Invité n'ayant pas de compte PHPfrance

01 févr. 2006, 08:48

! STOP !
La base MySQL est une base système du serveur, n'y touche pas et crée d'autres bases pour tes exercices. Les paramètres de configuration de connexion au serveur, la gestion des droits d'accès et ce genre de chose sont enregistrés dans la base MySQL, il ne faut pas y mettre les doigts, d'autant moins si tu ne maîtrises pas le système.
Ah, bon, heureusement que tu me le dis.. comment je crée une base ? C'est pas écrit dans mon bouquin :? (faut dire, plus flou et imprécis que ce bouquin, j'ai l'impression que c'est pas possible...)

Macou
Invité n'ayant pas de compte PHPfrance

01 févr. 2006, 08:49

C'est bon j'ai trouvé :mrgreen: