Erreur php call to undefined function mysql_prepare
Résolu
nouns62
Messages postés
110
Date d'inscription
Statut
Membre
Dernière intervention
-
Arthur57530 Messages postés 264 Date d'inscription Statut Membre Dernière intervention -
Arthur57530 Messages postés 264 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
comme vous le voyez dans le sujet, j'ai une erreur php, et ce suite à des modifications visant à optimiser mes requètes SQL.
Je voulais améliorer la vitesse de chargement de mes pages, et je suis tombé sur ce lien du site du zéro (<3)
https://openclassrooms.com/fr/courses
En utilisant la fonction mysql_prepare, qui existe bien en php, j'obtiens "Fatal error: Call to undefined function mysql_prepare() in .../..."
Pouvez-vous m'aider svp?
Merci.
comme vous le voyez dans le sujet, j'ai une erreur php, et ce suite à des modifications visant à optimiser mes requètes SQL.
Je voulais améliorer la vitesse de chargement de mes pages, et je suis tombé sur ce lien du site du zéro (<3)
https://openclassrooms.com/fr/courses
En utilisant la fonction mysql_prepare, qui existe bien en php, j'obtiens "Fatal error: Call to undefined function mysql_prepare() in .../..."
Pouvez-vous m'aider svp?
Merci.
A voir également:
- Call to undefined function ssh2_connect()
- Qwerty to azerty - Guide
- Video to video - Télécharger - Conversion & Codecs
- Majuscule to minuscule - Guide
- Reboot to bootloader - Guide
- Bat to exe converter - Télécharger - Édition & Programmation
18 réponses
D'accord j'ai compris le crois !
Tu peux ne faire qu'une seule requete :)
Avec une joindure !
SELECT au.code, au.nom, au.prenom, au.mesure, in.Numero FROM intervention in, auterTable au WHERE au.codeMajeur = in.codeMajeur AND in.codeDelegé = :co AND au.codeDelegue = :co AND in.type=39
Mmh voilà, mais à arranger à ta sauce ! (Je savais pas le nom de ta deuxieme table)
Mais regarde du coté des jointures ;-)
Sinon envois les structures exactes de tes tables et les infos qu'il te faut et je te refais une requete proprement pcq là c'est un peu à l'arrache
Tu peux ne faire qu'une seule requete :)
Avec une joindure !
SELECT au.code, au.nom, au.prenom, au.mesure, in.Numero FROM intervention in, auterTable au WHERE au.codeMajeur = in.codeMajeur AND in.codeDelegé = :co AND au.codeDelegue = :co AND in.type=39
Mmh voilà, mais à arranger à ta sauce ! (Je savais pas le nom de ta deuxieme table)
Mais regarde du coté des jointures ;-)
Sinon envois les structures exactes de tes tables et les infos qu'il te faut et je te refais une requete proprement pcq là c'est un peu à l'arrache
Salut salut,
L'article traite de l'interrogation de la base de donnée en utilisant PDO, ce qui est une bonne pratique ;)
Par contre la fonction mysql_prepare n'existe pas, regarde bien les tutos sur PDO.
L'article traite de l'interrogation de la base de donnée en utilisant PDO, ce qui est une bonne pratique ;)
Par contre la fonction mysql_prepare n'existe pas, regarde bien les tutos sur PDO.
ok, merci de ta réponse, apparament une fonction mysqli_prepare() existe, je vais voir ce ce coté => https://www.php.net/manual/fr/mysqli.prepare.php
il y aurait un problème d'objet...
$bdd->prepare(); ou $res = mysql_prepare("$query); ? :)
il y aurait un problème d'objet...
$bdd->prepare(); ou $res = mysql_prepare("$query); ? :)
Salut !
$res = msqli_prepare($query);
Et ensuite $res->execute :)
Mais utilise PDO, comme l'a dit Kyser (décidément !), c'est une bonne pratique ;-)
$res = msqli_prepare($query);
Et ensuite $res->execute :)
Mais utilise PDO, comme l'a dit Kyser (décidément !), c'est une bonne pratique ;-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
humm, pas super dans mon cas mysqli car il faut un $link...
en fait, j'affiche dans une table html diverses données concernant la liste des clients dont s'occupe celui qui est logué, et ce dans une boucle for. Je voudrait donc afin d'optimiser la vitesse, ne pas devoir refaire une requète à chaque tour de boucle mais la préparer avant le for puis envoyer l'array des params dans chaque boucle.... j'espère être clair...
voilà mon code :
Des idées ? :D
merci beaucoup.
en fait, j'affiche dans une table html diverses données concernant la liste des clients dont s'occupe celui qui est logué, et ce dans une boucle for. Je voudrait donc afin d'optimiser la vitesse, ne pas devoir refaire une requète à chaque tour de boucle mais la préparer avant le for puis envoyer l'array des params dans chaque boucle.... j'espère être clair...
voilà mon code :
$rep=mysql_prepare('SELECT Numero FROM intervention WHERE codeMajeur = :majeur AND codeDelegue = :delegue AND type=39') or die(mysql_error()); for ($i=0;$rowma=mysql_fetch_array($res);++$i) { if (!$i){ echo'<br><u><h2>Ajouter des consignes :</h2></u>'; echo '<table border=1 width="75%">'; echo "<tr><td></td><td></td><td></td><td></td><td><input type=submit value=Enregistrer></td></tr>"; echo "<tr> <td width='20%'><b><u>Code </u></b></td> <td width='35%'><b><u>Nom </u></b></td> <td width='35%'><b><u>Prenom </u></b></td> <td width='20%'><b><u>Mesure </u></b></td> <td width='35%'><b><u>Consignes</u></b></td> </tr></br>"; } echo "<tr> <td>",$rowma['code'],"</td> <td>",$rowma['nom'],"</td> <td>",$rowma['prenom'],"</td> <td>",$rowma['mesure'],"</td>"; $parsid = preg_replace("/ /","_",'consigne'.$rowma['code']); array_push($arrcodes, $c); $rep->execute(array('majeur' => $rowma["code"], 'delegue' => $delegue["Code"]));
Des idées ? :D
merci beaucoup.
Mmh je ne comprend pas spécialement ta logique.
Ton codemajeur et codedélégué c'est l'utilisateur logué pour le quel tu affiches les infos ?
Peux tu mettre tes tables que tu utilises ? Et expliqué un peu ce que tu cherches à faire ?
Du style :
table user(id, nom, prenom, mdp)
Je cherche à trouvé l'id et le mdp avec le nom.
Ton codemajeur et codedélégué c'est l'utilisateur logué pour le quel tu affiches les infos ?
Peux tu mettre tes tables que tu utilises ? Et expliqué un peu ce que tu cherches à faire ?
Du style :
table user(id, nom, prenom, mdp)
Je cherche à trouvé l'id et le mdp avec le nom.
le majeur est le client, et le délégué l'employé si vous préférez... ^^
le délégué est logué (forcément).
je récupère la liste des majeurs qu'il gère.
pour chacun, une ligne de table apparaît (à chaque boucle du for) , j'y affiche en colonnes leurs infos (code(id), nom, prénom, mesure et une zone textarea pour y saisir des consignes afin de les enregistrer).
la table intervention est celle ou sont stockées lesdites consignes, avec en gros des champs dont codeMajeur, codeDélegué, et consigne (pas exactement mais je simplifie ^^).
je voudrais ne pas avoir à refaire une requète dans chaque tour de boucle afin d'alléger le serveur.
le délégué est logué (forcément).
je récupère la liste des majeurs qu'il gère.
pour chacun, une ligne de table apparaît (à chaque boucle du for) , j'y affiche en colonnes leurs infos (code(id), nom, prénom, mesure et une zone textarea pour y saisir des consignes afin de les enregistrer).
la table intervention est celle ou sont stockées lesdites consignes, avec en gros des champs dont codeMajeur, codeDélegué, et consigne (pas exactement mais je simplifie ^^).
je voudrais ne pas avoir à refaire une requète dans chaque tour de boucle afin d'alléger le serveur.
merci bien, par contre tu utilise ":co", mais comment les remplacer par le paramètre voulu, variable php du codeMajeur qui change à chaque boucle du for ? tel est mon problème avec la fonction mysql_prepare...
je voulais preparer la requete avant le for et l'exécuter en remplaçant le ":co" dans chaque boucle
?
Les rastas sont la preuve qu'on peut s'tresser tout en restant cool!
je voulais preparer la requete avant le for et l'exécuter en remplaçant le ":co" dans chaque boucle
?
Les rastas sont la preuve qu'on peut s'tresser tout en restant cool!
Salut !
Le :co c'est le délégué, donc le mec logué non ? Donc c'est le même, c'est le majeur qui change non ?
C'est ce que te permet de faire la jointure :
Tu veux tout les code majeur dont s'occupe le délégué avec le code :co
C'est bien ca ?
Le :co c'est le délégué, donc le mec logué non ? Donc c'est le même, c'est le majeur qui change non ?
C'est ce que te permet de faire la jointure :
Tu veux tout les code majeur dont s'occupe le délégué avec le code :co
C'est bien ca ?
bonjour, up après ce w-e chargé, mais pas en travail ^^
alors pour répondre à ta question, oui, pour chaque majeur dont s'occupe le délégué logué je récupère le codeMajeur, nom, prénom, et mesure.
Mais je dois faire une requête à chaque tour de boucle... ce qui à mon avis ralentit fortement mon site.
regarde :
voilà, je voudrais donc ne faire qu'une seule requête, si possible, à la place de celle en gras qui s'exécute à chaque tour de boucle...
Merci énormément à l'avance de votre aide!
alors pour répondre à ta question, oui, pour chaque majeur dont s'occupe le délégué logué je récupère le codeMajeur, nom, prénom, et mesure.
Mais je dois faire une requête à chaque tour de boucle... ce qui à mon avis ralentit fortement mon site.
regarde :
$res=mysql_query("select code,nom,prenom,mesure from majeur where Delegue='".$delegue['Code']. "' AND motiffin=' ' ORDER BY nom"); $_SESSION["nb"]=mysql_num_rows($res); for ($i=0;$rowma=mysql_fetch_array($res);++$i) { if (!$i){ echo'<br><u><h2>Toutes vos consignes :</h2></u>'; echo '<table border=1 width="75%">'; echo "<tr> <td width='10%'><b><u>Code </u></b></td> <td width='15%'><b><u>Nom </u></b></td> <td width='15%'><b><u>Prenom </u></b></td> <td width='10%'><b><u>Mesure </u></b></td> <td width='100%'><b><u>Consignes</u></b></td> </tr></br>"; } $parsid = preg_replace("/ /","_",'consigne'.$rowma['code']); $rap=mysql_fetch_array(mysql_query("SELECT Rapport FROM intervention WHERE CodeMajeur='" .$rowma['code']."' AND CodeDelegue='".$delegue['Code']."' AND Type=39")); echo '<tr> <td>',$rowma["code"],'</td> <td>',$rowma["nom"],'</td> <td>',$rowma["prenom"],'</td> <td>',$rowma["mesure"],'</td> '; $rep=mysql_query('SELECT Numero FROM intervention WHERE codeMajeur="'.$rowma["code"].'" AND codeDelegue="'.$delegue["Code"].'"AND type=39') or die(mysql_error()); //on teste si une consigne avec le même majeur existe déjà if(mysql_num_rows($rep)!=0) { echo '<td><div id=\''.$parsid.'\' >'.html_entity_decode($rap['Rapport'], ENT_QUOTES,'UTF-8').'</div></td>'; } else echo '<td><div style="color: #91283B;"><b>Aucune consigne enregistrée pour ce majeur.</b></div></td>'; array_push($arrcodes, $rowma['code']); }//for
voilà, je voudrais donc ne faire qu'une seule requête, si possible, à la place de celle en gras qui s'exécute à chaque tour de boucle...
Merci énormément à l'avance de votre aide!
j'ai aussi essayé ça (en regardant là => https://forum.phpfrance.com/vos-contributions/faire-des-requetes-preparees-avec-extension-mysql-t255960.html#p341769) :
avant le for :
$stmt1=mysql_query("PREPARE stmt1 FROM 'SELECT Rapport FROM intervention WHERE CodeMajeur=? AND CodeDelegue=? AND Type=39'") or die(mysql_error()); dans le for :
$rap = mysql_fetch_array(mysql_query("EXECUTE stmt1 USING ".$rowma['code'].",".$delegue['Code']));
j'obtiens une suite d'erreurs :
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Program Files\......\voirconsignes.php on line 53(en gras)
wtf?
Les rastas sont la preuve qu'on peut s'tresser tout en restant cool!
avant le for :
$stmt1=mysql_query("PREPARE stmt1 FROM 'SELECT Rapport FROM intervention WHERE CodeMajeur=? AND CodeDelegue=? AND Type=39'") or die(mysql_error()); dans le for :
$rap = mysql_fetch_array(mysql_query("EXECUTE stmt1 USING ".$rowma['code'].",".$delegue['Code']));
j'obtiens une suite d'erreurs :
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Program Files\......\voirconsignes.php on line 53(en gras)
wtf?
Les rastas sont la preuve qu'on peut s'tresser tout en restant cool!
Alors tu peux faire une seule requete ! C'est même l'objectif
Pour cela une seule solution : la jointure externe.
Tu peux très bien faire une requete en appelant plusieurs table (c'est ce que tu veux dans ton cas)
Tu as alors deux requetes :
select code,nom,prenom,mesure from majeur where Delegue=$delegue['Code'] AND motiffin=' '
SELECT Rapport FROM intervention WHERE CodeMajeur= $rowma['code'] AND CodeDelegue= $delegue['Code'] AND Type=39"
Enfaite tu n'as même pas besoin de jointure, enfin si mais implicite avec une requete imbriquée. J'explique : tu peux faire une requete dans une autre.
Donc ton cas cela va donné :
SELECT Rapport FROM intervention WHERE CodeMajeur IN ( select code from majeur where Delegue=$delegue['Code'] AND motiffin=' ' ) AND CodeDelegue= $delegue['Code'] AND Type=39"
Le IN correspont au =, mais veut dire que la comparaison à droite renvois plusieurs lignes, ce qui est le cas de la requete.
Pour cela une seule solution : la jointure externe.
Tu peux très bien faire une requete en appelant plusieurs table (c'est ce que tu veux dans ton cas)
Tu as alors deux requetes :
select code,nom,prenom,mesure from majeur where Delegue=$delegue['Code'] AND motiffin=' '
SELECT Rapport FROM intervention WHERE CodeMajeur= $rowma['code'] AND CodeDelegue= $delegue['Code'] AND Type=39"
Enfaite tu n'as même pas besoin de jointure, enfin si mais implicite avec une requete imbriquée. J'explique : tu peux faire une requete dans une autre.
Donc ton cas cela va donné :
SELECT Rapport FROM intervention WHERE CodeMajeur IN ( select code from majeur where Delegue=$delegue['Code'] AND motiffin=' ' ) AND CodeDelegue= $delegue['Code'] AND Type=39"
Le IN correspont au =, mais veut dire que la comparaison à droite renvois plusieurs lignes, ce qui est le cas de la requete.
merci bien de ton aide jérémy. donc je ne serait pas obligé d'utiliser mysqli_prepare apparament..?
par contre après il faut que je récupère les bonnes infos correspondant au majeurs, car certains n'ont pas de consigne...
par contre après il faut que je récupère les bonnes infos correspondant au majeurs, car certains n'ont pas de consigne...
Préparer une requete est une norme de la PDO, et ca n'a rien avoir avec le type de requete utilisée :)
On passe encore au dessus alors si il te faut d'autre infos :
SELECT m.code, m.nom, m.prenom, m.mesure, i.rapport
FROM majeur m, intervantion i
WHERE m.delegue=i.delegue
AND m.motiffin=' '
AND i.CodeDelegue= $delegue['Code'] AND i.Type=39
On passe encore au dessus alors si il te faut d'autre infos :
SELECT m.code, m.nom, m.prenom, m.mesure, i.rapport
FROM majeur m, intervantion i
WHERE m.delegue=i.delegue
AND m.motiffin=' '
AND i.CodeDelegue= $delegue['Code'] AND i.Type=39
Enorme merci, même si j'ai trouvé autrement par moi-même en même temps que toi!
SELECT m.code, m.nom, m.prenom, m.mesure, i.Rapport
FROM majeur m LEFT JOIN intervention i ON i.CodeMajeur=m.code
WHERE Delegue='".$delegue['Code']."' AND motiffin=' ' ORDER BY nom";
voilà! en une seule requete tout est fait alors qu'avant il me fallait 2 ou 3 fois le nombre de majeurs!!!!!
évidemment, maintenant il faut que je revoie toute la conception de cette partie, car il y a aussi ajout, modif, suppression... é_è'
en tout cas merci beaucoup pour ton aide jérémy! même si j'ai trouvé, c'est grâce à toi, car moi j'avait cherché beaucoup trop compliqué, et tu m'a remis sur le droit chemin ;-)
SELECT m.code, m.nom, m.prenom, m.mesure, i.Rapport
FROM majeur m LEFT JOIN intervention i ON i.CodeMajeur=m.code
WHERE Delegue='".$delegue['Code']."' AND motiffin=' ' ORDER BY nom";
voilà! en une seule requete tout est fait alors qu'avant il me fallait 2 ou 3 fois le nombre de majeurs!!!!!
évidemment, maintenant il faut que je revoie toute la conception de cette partie, car il y a aussi ajout, modif, suppression... é_è'
en tout cas merci beaucoup pour ton aide jérémy! même si j'ai trouvé, c'est grâce à toi, car moi j'avait cherché beaucoup trop compliqué, et tu m'a remis sur le droit chemin ;-)
Tout ça pique les yeux , c'est atroce à la lecture et à la compréhension aïe
PDO ou mysqli sont des couches d'abstraction supplémentaire pour l'accès à la base de donnée , ça permet ( théoriquement ) de rendre indépendant le moteur SQL utilisé ( postgre mysql ... )
donc que tu prépare ou non ta requête , celle ci ne change pas .
arthur spitznagel
PDO ou mysqli sont des couches d'abstraction supplémentaire pour l'accès à la base de donnée , ça permet ( théoriquement ) de rendre indépendant le moteur SQL utilisé ( postgre mysql ... )
donc que tu prépare ou non ta requête , celle ci ne change pas .
arthur spitznagel