Как удалить строки в нескольких таблицах с помощью pdo - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь удалить категорию и принадлежащие ей товары в products_TABLE, используя pdo INNER JOIN.это работает, если я удаляю только категорию, не удаляя продукты.Вот мой код:

$catid = filterString($_GET['cat_id']);
$stmt = $pdo->prepare('DELETE FROM categories AS c
                        INNER JOIN products AS p ON c.cat_id = p.catid
                        WHERE cat_id = :cat_id
                        ');
$delete = $stmt->execute(array('cat_id' =>$catid));

У меня ошибка:

Неустранимая ошибка: Uncaught PDOException: SQLSTATE [HY093]: Неверный номер параметра: параметр не был определенв D: \ wamp \ www \ p \ employee \ DelStore.php: 25 Трассировка стека: # 0 D: \ wamp \ www \ p \ employee \ DelStore.php (25): PDOStatement-> execute (Array)

1 {main} добавлено в D: \ wamp \ www \ p \ employee \ DelStore.php в строке 2

Я понимаю, что указанные параметры недействительны, но не может решить, как задатьпараметры в:

$delete = $stmt->execute(array('cat_id' =>$catid));

Спасибо за любые советы

1 Ответ

0 голосов
/ 23 мая 2018

Вы получаете ошибку, потому что у вас есть :products.catid Измените это на products.catid

Также, если вы хотите удалить записи из обеих таблиц, вы должны использовать псевдонимы.

DELETE c,p FROM categories c
INNER JOIN products p ON c.cat_id = p.catid
WHERE cat_id = :cat_id

Также необходимо изменить

$delete = $stmt->execute(array('cat_id' =>$catid));

на

$delete = $stmt->execute(array(':cat_id' =>$catid));

Приведенный выше пример не работает, если вы используете SQL Server.В этом случае вы должны использовать 2 отдельных запроса на удаление.

Также, когда вы связываете параметры в функции execute как массив, который связывается как строки.Это также может вызвать некоторые проблемы в зависимости от структуры вашей базы данных.Использование $stmt->bindParam() обычно является лучшим вариантом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...