Erreur SQL

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 : Erreur SQL

Re: Erreur SQL

par sirakawa » 07 déc. 2012, 17:10

Bonjour à tous,
lorsque j'essaye d'executer une requete php j'obtien une erreur : "Erreur SQL2 !"

Pourtant je ne pense pas que ma requete soit fausse mais je suis perdu.
$reqmail = "SELECT * FROM personnel WHERE identifiant = '" . $id_pers . "'";
      $req = mysql_query($reqmail,$db) or die('Erreur SQL2 !<br>'.$reqmail.'<br>'.mysql_error()); 

Merci
Le premier réflexe est d'ajouter:
print <br>$reqmail<br>";
de copier le résultat et de le coller dans phpadmi n ou semblable.
le second réflexe est:
$reqmail = "SELECT * FROM personnel WHERE identifiant = $id_pers";
ou
$reqmail = "SELECT * FROM personnel WHERE identifiant = '$id_pers'";

Re: Erreur SQL

par xTG » 07 déc. 2012, 16:18

Si c'est un int pas de quote alors.
$reqmail = "SELECT * FROM personnel WHERE identifiant = " . mysql_real_escape_string($id_pers);
Mais sans avoir le retour de mysql_error() je ne crains de pouvoir t'aider plus, l'erreur peut être tout autre... (erreur de connexion à la bdd, table inexistante, ect)

Re: Erreur SQL

par Legendkiller06510 » 07 déc. 2012, 15:50

En réseau local ça fonctionne bien mais en mettant le tout sur franceserv ça disfonctionne.

Re: Erreur SQL

par Legendkiller06510 » 07 déc. 2012, 15:43

Désolé de ne pas t'avoir indiqué la nature d'identifiant mais il bien d'un int.

Re: Erreur SQL

par xTG » 07 déc. 2012, 15:35

Je vois que je vais être obligé de répondre à ta place à mes questions...

Après étude de ton code identifiant semble être une chaîne de caractères utilisée pour se connecter, c'est donc un VARCHAR dans la base de données.
Dans ce cas s'il contient des caractères spéciaux cela peut provoquer une erreur dans la requête SQL.
Pour régler cela il faut utiliser la fonction d'échappement que je t'ai montré plus haut.

De plus avant d'utiliser une variable globale il faut toujours tester son existence !
if( isSet($_GET['username']) ){
  // traitement
}else{
  // oups il nous manque quelque chose là...
}

Re: Erreur SQL

par Legendkiller06510 » 07 déc. 2012, 14:53

Dans la page précédente j'affiche un tableau et lorsque je clique sur un nom je veux afficher les informations spécifiques à la personne contenues dans la base de données.


Page précédente :
 $sql = "SELECT identifiant ,nom,prenom,civilite,fonction,unite,unite2,batiment,batiment2,pole,pole2 FROM personnel ORDER BY nom" ;
 

 

// on envoie la requête 
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());


$num_rows = mysql_num_rows($req);
if ($num_rows != 0 ){
echo "<table border='1'>
<thead>
<th>Nom</th>
<th>Prénom</th>
<th>civilite</th>
<th>Fonction</th>
<th>Unité</th>
<th>Unité</th>
<th>Batiment</th>
<th>Batiment</th>
<th>Pôle</th>
<th>Pôle</th>
</thead>";

while($row = mysql_fetch_array($req)) {
echo "<tr>";
echo '<td><a id ="lien_nom" href="personnel.php?username='.$row['identifiant'].'">'. $row['nom'].'</a></td>'; 
echo "<td>". $row['prenom'] . "</td>";
echo "<td>" . $row['civilite'] . "</td>";
echo "<td width=15%>" . $row['fonction'] . "</td>";
echo "<td>" . $row['unite'] . "</td>";
echo "<td>" . $row['unite2'] . "</td>";
echo "<td>" . $row['batiment'] . "</td>";
echo "<td>" . $row['batiment2'] . "</td>";
echo "<td>" . $row['pole'] . "</td>";
echo "<td>" . $row['pole2'] . "</td>";
echo "</tr>";
}
echo "</table>";}


Page suivante :
$id_pers = $_GET['username'];
$link = mysql_connect('sql.franceserv.fr', 'xxx', 'www');
		mysql_select_db('xxx', $link); 

       // on crée la requête SQL 
       //$sql = 'SELECT identifiant,nom,prenom,civilite,fonction,unite,unite2,batiment,batiment2,pole,pole2 FROM personnel WHERE identifiant=$id_pers' ; 

       // on envoie la requête 
	   $reqmail = "SELECT * FROM personnel WHERE identifiant = '" .$id_pers. "'";
      $req = mysql_query($reqmail,$db) or die('Erreur SQL2 !<br>'.$reqmail.'<br>'.mysql_error()); 

Re: Erreur SQL

par xTG » 07 déc. 2012, 14:45

A mon avis tu nous as encore oublié une ligne. ^^

identifiant est de quel type ? C'est un VARCHAR ou un INT ?
Si c'est un int il ne faut pas de quote.

Re: Erreur SQL

par Legendkiller06510 » 07 déc. 2012, 14:29

Le code d'erreur exacte est : Erreur SQL2 !
SELECT * FROM personnel WHERE identifiant = '36'

Biensur l'identifiant change en fonction de la personne.

Re: Erreur SQL

par xTG » 07 déc. 2012, 14:20

Elle peut être fausse suivant ce que tu mets dans $id_pers.
Joli micmac en tout cas... Le message d'erreur ne fait pas apparaître la requête...
Tu nous a bien donné le code tel quel ? Et non pas un raccourci fortuit ? ^^

Et quant à ta ta variable il faut toujours échapper une variable passée à une requête :
$reqmail = "SELECT * FROM personnel WHERE identifiant = '" . mysql_real_escape_string($id_pers) . "'";

Erreur SQL

par Legendkiller06510 » 07 déc. 2012, 14:03

Bonjour à tous,
lorsque j'essaye d'executer une requete php j'obtien une erreur : "Erreur SQL2 !"

Pourtant je ne pense pas que ma requete soit fausse mais je suis perdu.
$reqmail = "SELECT * FROM personnel WHERE identifiant = '" . $id_pers . "'";
      $req = mysql_query($reqmail,$db) or die('Erreur SQL2 !<br>'.$reqmail.'<br>'.mysql_error()); 

Merci