2009-06-10 8 views
1

Hey tout, juste une question rapide (devrait être une solution facile, je pense). Dans une instruction WHERE dans une requête, existe-t-il un moyen d'avoir plusieurs colonnes à l'intérieur? Voici mon code:Plusieurs colonnes après un WHERE en PHP?

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and pwd='$pass'"; 

Ce que je veux faire est d'ajouter une autre colonne après la WHERE (appelée priv_level = 'privlevel de $). Je n'étais pas sûr de la syntaxe sur la façon de le faire cependant.

Merci pour l'aide!

+3

Voir cette question pour savoir pourquoi c'est une mauvaise idée et comment faire ce dont vous avez besoin en toute sécurité: http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php –

Répondre

3

Lecture sur SQL. Mais de toute façon, pour le faire il suffit d'ajouter AND priv_level = '$privlevel' à la fin du SQL.

Cela pourrait être une étape assez importante si vous êtes nouveau sur PHP, mais je pense que vous devriez lire sur le mysqli class in PHP aussi. Cela permet une exécution beaucoup plus sûre des requêtes.

Sinon, voici un moyen plus sûr:

$sql = "SELECT * FROM $tbl_name WHERE " . 
     "username = '" . mysql_real_escape_string($myusername) . "' AND " . 
     "pwd = '" . mysql_real_escape_string($pass) . "' AND " . 
     "priv_level = '" . mysql_real_escape_string($privlevel) . "'"; 
+1

PDO est encore mieux que mysqli –

+0

Je dois dire que je n'avais pas entendu parler de PDO ... Mais là encore, la dernière fois que j'ai utilisé PHP correctement il y a environ quatre ans ... Merci pour le conseil! =) – Blixt

0

raccourcies pour des raisons de lisibilité:

$sql=" 
    SELECT * 
    FROM $tbl_name 
    WHERE username='$myusername' and pwd='$pass' and priv_level = '$privlevel' 
"; 

Quelqu'un d'autre va vous mettre en garde sur la façon dont la déclaration est dangereuse. :-) Pensez SQL injection.

0
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and pwd='$pass' and priv_level = '$privlevel'"; 

Si vous préférez ne pas utiliser », essayez ceci:

$sql='SELECT * FROM '.$tbl_name.' WHERE username=\''.$myusername.'\' and pwd=\''.$pass.'\' and priv_level=\''.$privlevel.'\''; 
0
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and pwd='$pass' AND priv_level = '$privlevel'"; 

Sur une note côté: ce que vous paraissez faire ici est une mauvaise pratique.

0

Je pense yo u besoin d'ajouter (peut-être avec ET) à la clause WHERE:

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and pwd='$pass' and priv_level = '$privlevel'"; 
0

Uhm, votre requête utilise déjà plusieurs colonnes dans la clause WHERE :)

problèmes d'injection SQL côté (attention) :

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and pwd='$pass' and priv_level='$privlevel'"; 
0

la clause WHERE peut AND un certain nombre de contrôles, de sorte que vous pouvez facilement avoir trois où vous avez pas deux, il suffit d'ajouter and priv_level='$priv_level' à la fin. Edit: comme la réponse de @ thorarin, il s'agit d'une manière risquée de construire des requêtes SQL, et la liaison des paramètres serait plus sûre - mais c'est orthogonal à l'utilisation de deux colonnes dans la clause WHERE.

Questions connexes