Процесс будет выглядеть так:
CREATE PROCEDURE MyProc(IN in_title TEXT)
BEGIN
SELECT p.postID, p.title, p.tagID, p.content, p.date, p.postImage, u.username
FROM user as u inner JOIN user_post as UP on u.userID=up.userID inner
JOIN post as p ON up.postID=p.postID
WHERE p.title LIKE CONCAT('%', in_title, '%');
END
Будьте осторожны, чтобы назвать входной параметр вашего процесса чем-то отличным от любого из столбцов вашей таблицы, иначе вы можете получить неожиданные результаты.
Вы НЕ должны использовать подготовленный оператор в этой процедуре.Просто используйте параметр вашей процедуры в выражении в вашем операторе SQL.
Вам не нужно писать курсор в proc для обработки результата.По умолчанию, который MySQL делает с оператором SELECT, он возвращает свой результат.
Вы бы назвали его из PHP следующим образом:
$req = $db->prepare("CALL MyProc(:title)");
Весь остальной код PHP будетидентичны.
Честно говоря, я не стал бы беспокоиться об этой процедуре.Это не очень помогает уменьшить ваш код.Но это так:
- Заставляет вас изучать новый язык для кода процедуры
- Сложное развертывание приложения
- Риск, увеличивающий нагрузку обработки на сервер базы данных
Я почти никогда не использую хранимые процедуры MySQL.