@DeniSidorenko

Как правильно передавать параметры в запрос PDO ООП?

Добрый день есть такой метод
// Get All Rows
  public function getAll($query, $params=[]){

    try{
      $stmt = $this->datab->prepare($query); // Подгатавливаем запрос, указывая $table как переменную
      $stmt->execute($params); // Выполняем запрос
      return $stmt->fetchAll(); // Поулчаем результаты

    } catch(PDOException $e) {
      throw new Exception($e->getMessage()); // Вывод ошибки если не удалось подключиться к базе данных
    }

  }

$db = new Database();
  
  // $getTable = $db->getAll('SELECT * from ?', ['product']);  -- Выдает ошибку что неверный запрос в базе данных :(
  $getTable = $db->getAll('SELECT * from product'); // Не получает задать что бы product был отправлен в качестве параметра :


Как задать что бы можно было передавать названия product как параметр, а не вшить его query запрос
  • Вопрос задан
  • 220 просмотров
Пригласить эксперта
Ответы на вопрос 3
FanatPHP
@FanatPHP
Чебуратор тега РНР
В рамках данного метода - никак.

Чтобы подставлять имя таблицы в запрос, надо будет по настоящему учить ООП, и писать настоящие классы, а не то что у тебя сейчас - обычная функция, которой класс по сути не нужен.

Если никто не соберется прочесть вопрос и написать нормальный ответ, я попробую найти время в выходные и доделать статью, где объясняется, как это делать правильно
Ответ написан
Комментировать
cr1gger
@cr1gger
Все дороги ведут в Рим — встретимся в Риме!
$getTable = $db->getAll('SELECT * from :product', [':product' => 'product']);

https://www.php.net/manual/ru/pdo.prepare.php
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
$params = ['table'=>'product'];
$sql = 'SELECT * from :table';
$getTable = $db->getAll($sql,$params);

Хотя вообще то это вроде внутренний метод модели, так что он должен сам подставлять таблицу модели из свойств модели.

UPD: Спасибо FanatPHP что открыл глаза на мой косяк, я на автомате ответил, забыв что таблнэймы не биндятся. Еще раз повторюсь что имя таблицы берется из модели(если конечно это АктивРекорд). Соответственно будет что-то типа $sql = "SELECT * from `{$this->tableName}`";, хотя это упрощение до упора.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы