Функция PDO MySql для приема нескольких параметров

0

У меня есть функция PDO, которая выполняет запрос Mysql.

public function run($sql, array $params = NULL) {

  $statement = $this->pdo->prepare($sql);

  if (!is_null($params)) {

    foreach ($params as $key) {

      $statement->bindParam(":n", $key);

    }

  }

  $statement->execute();

  return $statement->fetchAll(PDO::FETCH_CLASS);

}

Это работает только с отдельными параметрами (см. Мой предыдущий вопрос)

Поэтому я пробовал модифицировать foreach в функции

foreach ($params as $key => $value) {

  $statement->bindParam($key, $value);

}

Я запускаю запрос как

$variation = $query->run(
  "SELECT url, title, sale_price
  FROM product
  where category_id = :category
  and url != :url",
  [ ":category" => $data[0]->category_id, ":url" => $filePathArray[1] ]
);

Он возвращает пустой набор.

  • 1
    Зачем вам это делать, когда вы можете просто передать массив параметров в $statement->execute() ?
  • 0
    @rlanvin с помощью bindParam() вы можете указать тип (int, string) и т. д., который является третьим параметром.
Показать ещё 6 комментариев
Теги:
pdo

1 ответ

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

Эта функция не требуется. Вы можете передать массив параметров непосредственно в $statement->execute() как описано в документации для PDOStatement :: execute().

Это так же безопасно, как и с помощью bindParam(), он одинаково защищает от SQL-инъекции.

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

Ещё вопросы

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