В MySQL создал хранимую процедуру. Не уверен, что правильно, т.к. необходимо ли в OUT указывать что вернуться может множество строк?:
CREATE PROCEDURE `myProcedure` (IN id INT)
BEGIN
SELECT * FROM product WHERE category_id = id;
END
1) Главный вопрос, как вызвать и как вызвать хранимую процедуру из PHP правильно, нужно ли использовать подготовленные запросы?
2) Вопрос возник, когда вызывал хранимую процедуру из phpMyAdmin используя SQL CALL myProcedure(157) отображалось 12 строк. При создании хранимой процедуры параметры OUT я не указывал. А при попытке вызвать CALL myProcedure(9999) с несуществующим ID я ожидал, что вернется 0 строк, а вернулось:
Ошибка
Статический анализ:
Найдено 1 ошибок при анализе.
Неизвестное ключевое слово. (near "ON" at position 25)
SQL запрос:
SET FOREIGN_KEY_CHECKS = ON;
Ответ MySQL:
#2014 - Commands out of sync; you can't run this command now
Мне кажется что я что то сделал не так, т.к. при запросе с не существующем id должно вернуться просто 0 строк.
P.S: Запрос я упростил, возможно зря и это лишь собьет с толку. Вот полный запрос:
DELIMITER //
CREATE PROCEDURE `getProductById` (IN id INT)
BEGIN
SELECT product.id, product.price, product.img, product.store_address, category.name, shop.name
FROM product
INNER JOIN category ON product.category_id = category.id
INNER JOIN shop ON product.shop_id = shop.id
WHERE category.id = id;
END //
Лучше использовать хранимую процедуру или функцию?
Я вроде создавал не процедуру а функцию, и перезаписывал ее аж 7 раз, так как каждый раз что то было не так а вызывал я её так:
SELECT название_функции( значение переменной );
Этого мне было достаточно
Но чаще всего я использовал такую конструкцию (пример)
SELECT t1.*, название_функции( t1.`название_столбца` )
FROM `название_таблицы` t1;
в этом случае моя самописная функция отдавала одно значение и оно встраивалось в результат ответа SELECT в каждую строку
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости