2009-05-29 7 views
0

Je possède ce morceau de code:Pourquoi ma recherche ne sera pas améliorée?

//Restrict the SQL query with an AND clause if a member has been selected 
if ($form_member_id != 0) { 
    $query .= "AND photos.member_id = '$form_member_id' "; 
} 

Il est destiné à affiner une requête de recherche vers le bas pour que l'utilisateur sélectionné, donc toute requête se lit ainsi:

SELECT 
photos.photo_id, members.member_name, photos.photo_title, photos.photo_film, photos.photo_height, photos.photo_width 
FROM members, photos 
WHERE members.member_id = photos.member_id 
    AND photos.member_id = '$form_member_id' 

Pour une raison quelconque cela ne ne fonctionne pas, ive testé la requête et cela fonctionne bien, mais pour une raison quelconque, il ne fonctionnera pas avec le code écrit ive. J'ai vérifié la différence dans les noms des variables, mais ils sont tous les mêmes .... quelqu'un sait pourquoi ça ne marche pas !!!

Répondre

0

Il est évident que vous devez imprimer la requête complète avant de l'exécuter, puis l'exécuter manuellement et voir ce qui se passe. En outre, vous devez utiliser prepared statements.

3

Je pense que vous avez besoin d'un espace avant et sinon ce sera:

WHERE members.member_id = photos.member_idAND photos.member_id = '$form_member_id' 

au lieu de

WHERE members.member_id = photos.member_id AND photos.member_id = '$form_member_id' 

Ditto ce @Matthew dit à propos de l'utilisation des requêtes paramétrées, mais je reste pense que ce qui précède est le problème.

0

Une autre chose, et je ne suis pas expérimenté avec php, mais votre code semble prime-cible pour les attaques par injection SQL ...

Quelqu'un pourrait bourrer le tampon pour votre « $form_member_id » et de mettre en valeur comme

'; truncate members; '

où le chef de file et un devis de fuite font partie de la chaîne soumise ... la première « ; terminera votre chaîne, pour mettre fin à une déclaration, puis tronquer votre table et ignorer le reste ...

Encore une fois, je ne suis pas une personne de PHP, mais tant d'autres messages de sécurité historique parler de PARAMETRAGE vos requêtes pour prévenir de telles attaques par injection

0

debug le script en utilisant

if ($form_member_id != 0) { 
     $query .= "AND photos.member_id = '$form_member_id' "; 
     die($query); 
} 

copier et coller la requête et l'exécuter dans phymyadmin ou etc pour comprendre la source de bug

pour une meilleure sécurité, vous voudrez peut-il être comme ça

if ($form_member_id != 0) { 
     $query .= "AND photos.member_id = '" . mysql_real_escape_string($form_member_id) . "' "; 
} 
0

Vous devez faire écho à la requête si son travail dès maintenant pour vous de voir ce qui semble être le problème :)

Questions connexes