Как объединить параметр в запросе

0

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

$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

  • 0
    Вы хотите искать по идентификатору или имени? Поскольку у вас нет значения имени в вашей функции, вы можете искать только по идентификатору, переданному в функцию.
Теги:

3 ответа

0
Лучший ответ

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

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

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

EDIT: для предотвращения использования 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);
  • 0
    Благодарю. Оно работает!
  • 0
    Это может иметь возможную атаку SQL-инъекцией. См. En.wikipedia.org/wiki/SQL_injection
Показать ещё 1 комментарий
2

Посмотрите это руководство по 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

Предполагаю, что вы используете 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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню