Как объединить параметр в запросе - PullRequest
0 голосов
/ 02 декабря 2009

Я хочу использовать параметр в следующем запросе, но я не совсем уверен, как это сделать.

$id будет 1, 2 или 3 и т. Д., И я хочу выбрать, где C.Name - Galleri1 или Galleri2 и т. Д.

Это то, что я получил до сих пор, но я не уверен, как добавить $ 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"
           ');

ОБНОВЛЕНИЕ: я использую PHP и MySQL

Ответы [ 3 ]

2 голосов
/ 02 декабря 2009

Посмотрите это руководство по PHP .

Сначала вы создаете строку для названия галереи. "Galleri1", "Galleri2" и т. Д. Затем свяжите эту строку в качестве параметра для запроса.

Примерно так:

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

Создание строки запроса из параметра, как предлагали другие авторы, может открыть дверь для Атаки SQL-инъекции , если вы не будете осторожны. Например, что произойдет, если $id="' OR 1=1 OR C.Name !='" и вы соедините его со строкой запроса?

Использование привязки параметров, как я показал выше, предотвращает эту проблему.

1 голос
/ 02 декабря 2009

Я предполагаю, что вы используете PHP. Вероятно, что-то вроде

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

Однако вы должны знать и о SQL-инъекциях , поэтому сначала избегайте его (если это не сделано в другом месте):

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

Если ваш класс баз данных поддерживает подготовленные операторы , вы должны использовать их вместо этого.

0 голосов
/ 02 декабря 2009

Я думаю, что вы ищете здесь:

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

Примечание: я исправил орфографию Галереи в запросе, так как думаю, что это была опечатка:

Galleri

до:

Gallery

Надеюсь, это поможет!

РЕДАКТИРОВАТЬ: Для предотвращения SQL-инъекций используйте вместо:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...