Page 1 sur 1

Erreur SQL

Posté : 07 déc. 2012, 14:03
par Legendkiller06510
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

Re: Erreur SQL

Posté : 07 déc. 2012, 14:20
par xTG
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) . "'";

Re: Erreur SQL

Posté : 07 déc. 2012, 14:29
par Legendkiller06510
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

Posté : 07 déc. 2012, 14:45
par xTG
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

Posté : 07 déc. 2012, 14:53
par Legendkiller06510
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

Posté : 07 déc. 2012, 15:35
par xTG
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

Posté : 07 déc. 2012, 15:43
par Legendkiller06510
Désolé de ne pas t'avoir indiqué la nature d'identifiant mais il bien d'un int.

Re: Erreur SQL

Posté : 07 déc. 2012, 15:50
par Legendkiller06510
En réseau local ça fonctionne bien mais en mettant le tout sur franceserv ça disfonctionne.

Re: Erreur SQL

Posté : 07 déc. 2012, 16:18
par xTG
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

Posté : 07 déc. 2012, 17:10
par sirakawa
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'";