2009-12-02 6 views
0

Je souhaite utiliser un paramètre dans la requête suivante, mais je ne suis pas vraiment sûr de savoir comment le faire.Comment concaténer le paramètre dans la requête

Si vous pouvez m'aider, je serai reconnaissant.

$ id sera 1, 2 ou 3, etc., et je veux choisir où C.Name est Galleri1, ou Galleri2 etc.

C'est ce que je suis arrivé à ce jour, mais je ne suis pas sûr de savoir comment ajoutez $ id.

function getGallery($id){ 

$data = array(); 

$Q = $this->db->query('SELECT P.*, C.Name AS CatName 
      FROM products AS P 
      LEFT JOIN categories C 
      ON C.id = P.category_id 
      WHERE C.Name = "Galleri($id)" 
      AND p.status = "active" 
      '); 

MISE À JOUR: J'utilise PHP et MySQL

+0

Voulez-vous effectuer une recherche par ID ou par nom? Puisque vous n'avez pas la valeur de nom dans votre fonction, vous ne pouvez effectuer une recherche que par l'ID transmis à la fonction. –

Répondre

0

Je pense que ce que vous cherchez ici est:

function getGallery($id){ 

$data = array(); 

$Q = $this->db->query('SELECT P.*, C.Name AS CatName 
        FROM products AS P 
        LEFT JOIN categories C 
        ON C.id = P.category_id 
        WHERE C.Name = "Gallery' . $id . '" 
        AND p.status = "active" 
        '); 

Note: Je fixe l'orthographe de la galerie dans la requête, car je pense qu'il était probablement une faute de frappe:

Galleri 

à:

Gallery 

Espérons que cela aide!

EDIT: Pour éviter l'utilisation d'injection SQL au lieu:

function getGallery($id){ 

$data = array(); 

$id = str_replace("'", "''", $id); 

$query = 'SELECT P.*, C.Name AS CatName 
        FROM products AS P 
        LEFT JOIN categories C 
        ON C.id = P.category_id 
        WHERE C.Name = "Gallery' . $id . '" 
        AND p.status = "active" 
        ' 
$Q = $this->db->query($query); 
+0

Merci. Ça marche! – shin

+0

Cela peut avoir une attaque par injection SQL possible. Voir http://en.wikipedia.org/wiki/SQL_injection –

+0

True, mais ce n'est pas une question sur la sécurité SQL, c'est une question sur la façon d'ajouter le paramètre à la chaîne. Je vais modifier ma réponse en conséquence. –

2

Jetez un oeil à this PHP manual.

Vous devez d'abord créer une chaîne pour le nom de la galerie. "Galleri1", "Galleri2" etc. Puis lier cette chaîne comme paramètre à interroger.

Quelque chose comme ceci:

$sth = $this->prepare('SELECT P.*, C.Name AS CatName 
       FROM products AS P 
       LEFT JOIN categories C 
       ON C.id = P.category_id 
       WHERE C.Name = ? 
       AND p.status = "active" 
       '); 

$gallery_name = "Galleri$id"; 
$sth->bind_param(1, $gallery_name); 

$q = $sth->execute(); 

Construire une chaîne de requête de paramètres comme les autres ont suggéré answerers peut ouvrir la porte pour SQL injection attacks si vous ne faites pas attention. Par exemple, que se passe-t-il si $id="' OR 1=1 OR C.Name !='" et vous le concaténez à la chaîne de requête?

L'utilisation de la liaison de paramètres, comme je l'ai montré ci-dessus, permet d'éviter ce problème.

1

Je suppose que vous utilisez PHP. Probablement quelque chose comme

function getGallery($id){ 

    $data = array(); 

    $Q = $this->db->query("SELECT P.*, C.Name AS CatName 
         FROM products AS P 
         LEFT JOIN categories C 
         ON C.id = P.category_id 
         WHERE C.Name = 'Galleri$id' 
         AND p.status = 'active' 
         "); 

Vous devez cependant être conscient de SQL injections aussi, donc échapper d'abord (si elle ne se fait pas dans un autre lieu):

function getGallery($id) { 
    $id = $this->db->escape($db); // or similar 

Si votre soutien de la classe de base de données prepared statements , vous devriez les utiliser à la place.

Questions connexes