Unknown column '' in 'where clause

Fermé
mdpubs - Modifié par mdpubs le 1/04/2010 à 16:31
 mdpubs - 4 avril 2010 à 22:21
Bonjour,

Voilà un problème que je n'arrive pas à résoudre. Voici mon code :
---------------------------
<?php
session_start ();
include ("settings_sql.php");

// Connexion au serveur
$mysql_link = mysql_connect($CONF['sql_host'], $CONF['sql_username'], $CONF['sql_password']);
mysql_select_db($CONF['sql_database']);

// Creation et envoi de la requete
if(isset($_GET['username'])) $_GET['username']=$_GET['username'];
$sql = "SELECT title,url FROM Affiliation_sites WHERE username=".$_GET['username'];

$result = mysql_query($sql, $mysql_link) or die($sql.'<br/>'.mysql_error());
$resultat = mysql_fetch_assoc($result);
?>
-----------------------------

Le but est de part un lien : .....php?username=(Le nom du membre) d'accéder à une page avec les information le concernant (Titre,ban, url, description). Si je ne met pas un GET, je ne peux avoir que les infos concernant USERNAME, hors j'ai besoin que la page affiche aussi les autres infos (titre, ban...), d'ou l'intérêt du GET. Mais avec le GET, il m'affiche bien l'USERNAME, mais dit :

Unknown column 'Username' in 'where clause'

Pourtant l'Username est bien dans la colonne ?

Je comprends rien ! Si je fais sans la valeur GET, je n'obtiens que l'USERNAME et pas les autres infos (Titre, ban, url...)

Si quelqu'un a une idée :o)
A voir également:

9 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
4 avril 2010 à 21:17
En résumé:

<?php
session_start ();
include ("settings_sql.php");

// Connexion au serveur
$mysql_link = mysql_connect($CONF['sql_host'], $CONF['sql_username'], $CONF['sql_password']);
mysql_select_db($CONF['sql_database']);

// Creation et envoi de la requete
if(isset($_GET['username'])){
	// $_GET['username']=$_GET['username']; ne veut rien dire
	$username=mysql_real_escape_string($_GET['username'],$mysql_link);  //on securise surtout pour une valeur passée par l'URL, c a d la variable $usernane reupere la valeur passée par l'uRL en $_GET en appliquant la fonction mysql_real_escape_string
//ensuite il faut utiliser cette variable sinon ça sert à rien de l'avoir assainie par la fonction si tu fais ta requette avec ... WHERE username='$_GET.....

	$sql = "SELECT title,url FROM Affiliation_sites WHERE username='".$username."'";

	$result = mysql_query($sql, $mysql_link) or die($sql.'<br/>'.mysql_error());
	$resultat = mysql_fetch_assoc($result);
	//la suite de l'affichage
}

?> 
2
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
1 avril 2010 à 17:01
<?php
session_start ();
include ("settings_sql.php");

// Connexion au serveur
$mysql_link = mysql_connect($CONF['sql_host'], $CONF['sql_username'], $CONF['sql_password']);
mysql_select_db($CONF['sql_database']);

// Creation et envoi de la requete
if(isset($_GET['username'])){
	// $_GET['username']=$_GET['username']; ne veut rien dire
	$username=mysql_escape_string($_GET['username']);  //on securise surtout pour une valeur passée par l'URL
	$sql = "SELECT title,url FROM Affiliation_sites WHERE username='".$username."'";

	$result = mysql_query($sql, $mysql_link) or die($sql.'<br/>'.mysql_error());
	$resultat = mysql_fetch_assoc($result);
	//la suite de l'affichage
}

?> 
1
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
1 avril 2010 à 17:40
pourquoi session ?
si on arrive comme tu dis par un lien avec l'username passé par l'url en GET ça marche
complètes ton code avec ça:

//// ....
$resultat = mysql_fetch_assoc($result);
//tes infos sont dans l'array $resultat
$tilte=$resultat['title'];
$url=$resultat['url'];

//mais attention seuls sont disponibles ceux qui sont ecrits a droite de SELECT dans ta requette
//si tu les veux tous il faut faire SELECT * FROM ....
1
Bonjour

Ton problème, c'est que tu avais oublié les guillemets autour du nom d'utilisateur dans ta requête
$sql = "SELECT title,url FROM Affiliation_sites WHERE username=".$_GET['username'];
Si ton nom d'utilisateur était toto par exemple, ça devanait :
SELECT title,url FROM Affiliation_sites WHERE username=toto;
pour mysql, comme toto n'a pas de guillemets, c'est un nom de colonne (comme username)
D'où le message "Unknown column 'toto'"
Il faut systématiquement mettre entre guillemets les valeurs des champs texte (pas les noms de champs !) dans les requêtes mysql.
Dans ton cas :
$sql = "SELECT title,url FROM Affiliation_sites WHERE username='".$_GET['username']."'";
qui donnera
SELECT title,url FROM Affiliation_sites WHERE username='toto'
1
Oui c'est ça Mysql considérait l'USERNAME : exemple "bidule" comme un champs qui effectivement n'existe pas dans la table... Après il semble qu'il y ai plusieurs solutions car :

username='".$username."'"; (proposé par Alain), fonctionne bien
username='".$_GET['username']."'"; marche aussi

Ce serait intéréssant de savoir par défaut quelles solutions est la mieux et pourquoi ?

En tout cas j'ai beaucoup appris aujourd'hui, car j'utilise souvent ces requêtes...

Merci :o)
0
Comme le dit arthezius un peu plus bas, la version où $_GET['username'] a été échappé par mysql_real_escape_string est préférable. En fait, on doit utiliser cette fonction pour insérer des données dans mysql dès qu'il y a le moindre doute sur ce qu'elles peuvent contenir. C'est à dire dans 99,9 % des cas.
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
2 avril 2010 à 04:43
Je l'utilise personnellement pour quasiment toutes variables que je place dans mes requêtes.
0
Donc avec : mysql_real_escape_string() , il vaut mieux utiliser : username='".$_GET['username']."'"; ????
0
$username=mysql_real_escape_string($_GET['username']);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour Alain,

Merci pour la rapidité de ta réponse et le code plus clair... Je sais que dans mes codes, il y a souvent des anomalies, hi hi :o)

Bon je n'ai plus le problème de "Unknow column...", mais je ne peux avoir les autres champs correspondants à USERNAME. Par exemple si je veux le titre ($title), correspondant à l'USERNAME, cela ne s'affiche pas. C'est pour ça que j'ai pris un GET, mais peut-être que c'est plutôt SESSION ? Qu'en penses-tu ?

En fait l'idée, c'est une personne arrive avec le lien http://www.......php?username=bidule

Le code que tu m'as donné affiche bien l'USERNAME, mais si je mets :
<?php echo $title ;?>, le titre ($title), n'apparaît pas...

Si tu as une idée (voir même plusieurs, hi hi ).

En tout cas merci beaucoup de ton aide :o)
0
Yeah !!!!

Dans mon code ça marche avec <?php echo $tilte=$resultat['title'] ;?>

J'avais trouvé : <?php echo 'L\'Annuaire professionnel de ' .$resultat['title']; ?>, mais impossible de retirer 'L\Annuaire professionnel de ' qui me renvoyait une erreur, que je n'arrivais pas à résoudre...

Voilà, donc ton code est parfait et tout marche comme je voulais.

Je te remercie chaleureusement Alain :o). C'est vraiment cool !!!!
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
1 avril 2010 à 18:46
username='".$username."'";


est mieux car $username passe $_GET['username'] a travers la fonction mysql_escape_string

qui va protéger tous les caractères de la chaîne
0
arthezius Messages postés 3538 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 11 septembre 2016 475
1 avril 2010 à 20:39
Mieux: mysql_real_escape_string()
https://www.php.net/manual/fr/function.mysql-real-escape-string.php

Sur la page de mysql_escape_string():
Cette fonction est OBSOLETE depuis PHP 5.3.0. Nous vous encourageons vivement à ne plus l'utiliser.
0
Qu'en penses-tu Alain, car là, je sais plus lequel utiliser ? :

username='".$username."'"; avec mysql_escape_string ou
username='".$_GET['username']."'"; avec mysql_real_escape_string()

Ce que dit arthezius semble effectivement plus adapté ?
0
Super ! Bon ben je le garde alors !

Merci Alain :o)
0
Bonsoir Alain,

Cela semble nickel maintenant et ça marche bien sur ma page.Dorénavant je passerai par cette commande pour ce genre de suivi de lien.

C'est vraiment sympa. Merci beaucoup :o)
A+
0