MySQL Хранимые процедуры. Вызов из PHP

313
12 ноября 2017, 17:52

В 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 //

Лучше использовать хранимую процедуру или функцию?

Answer 1

Я вроде создавал не процедуру а функцию, и перезаписывал ее аж 7 раз, так как каждый раз что то было не так а вызывал я её так:

SELECT название_функции( значение переменной );

Этого мне было достаточно

Но чаще всего я использовал такую конструкцию (пример)

SELECT t1.*, название_функции( t1.`название_столбца` )
FROM `название_таблицы` t1;

в этом случае моя самописная функция отдавала одно значение и оно встраивалось в результат ответа SELECT в каждую строку

READ ALSO
GD установлено и не работает

GD установлено и не работает

Добрый вечер, понадобилась либа GD для PHP 56 на Debian 8

260
Как правильно написать SQL запрос к vtiger crm API

Как правильно написать SQL запрос к vtiger crm API

Всем приветНужно получить данные из vTiger CRM

272
Как получить значения из массива в PHP?

Как получить значения из массива в PHP?

Есть три массива заполненные числами типа float и мне надо взять значения элементов из массива и подставить в формулу для вычисленияКак это...

255