Sorguda parametre bağlamak nasıl

3 Cevap php

Ben aşağıdaki sorguda bir parametre kullanmak istiyorum, ama nasıl gerçekten emin değilim.

Bana yardımcı olabilir, ben minnettar olacaktır.

$ Id 1, 2 veya 3 gibi olacak ve ben C.Name Galleri1 nerede olduğunu seçmek istiyorsanız, ya Galleri2 vb

Bu ben bugüne kadar ne var, ama ben $ id eklemek için nasıl emin değilim.

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"
		   ');

GÜNCELLEME: Ben kullanıyorum PHP ve MySQL

3 Cevap

Burada içindir aradığınızı düşünüyorum:

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"
                   ');

Not: Ben muhtemelen bir yazım hatası olduğunu düşünüyorum ben, sorguda Galeri yazım sabit:

Galleri

için:

Gallery

Bu yardımcı olur umarım!

EDIT: yerine SQL enjeksiyon kullanımını önlemek için:

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);

this PHP manual bakabilirsiniz.

Önce galeri adı için bir dize oluşturmak. Vb "Galleri1", "Galleri2" Sonra sorgu için parametre olarak bu dizeyi bağlamak.

Böyle bir şey:

  $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();

Eğer dikkatli değilseniz answerers sürmüşlerdir diğerleri gibi parametre bir sorgu dizesi oluşturma SQL injection attacks için kapıyı açabilir. Örneğin, $id="' OR 1=1 OR C.Name !='" ne olur ve bunu dize sorgulamak bitiştirmek?

Parametre yukarıda gösterdi gibi, bağlayıcı kullanarak, bu sorunu önler.

Ben PHP kullanmak varsayalım. Muhtemelen gibi bir şey

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'
                      ");

Ancak SQL injections de farkında olmak, bu yüzden (o başka bir yerde yapılmaz ise) ilk önce kaçmak gerekir:

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

Veritabanı sınıf destek prepared statements, yerine bunları kullanmak gerekiyorsa.