@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 запрос
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 3
@FanatPHP
В рамках данного метода - никак.

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

Если никто не соберется прочесть вопрос и написать нормальный ответ, я попробую найти время в выходные и доделать статью, где объясняется, как это делать правильно
Ответ написан
@cr1gger
Junior PHP
$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}`";, хотя это упрощение до упора.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
ЧИТАЙ-ГОРОД Москва
от 140 000 до 210 000 ₽
DANYCOM Краснодар
от 50 000 до 100 000 ₽
Директ Кредит Казань
от 70 000 до 120 000 ₽
02 апр. 2020, в 21:27
600 руб./за проект
02 апр. 2020, в 21:15
3000 руб./за проект
02 апр. 2020, в 21:11
8500 руб./за проект