Для хранимой процедуры вам нужно немного изменить синтаксис.Обратите внимание, что длина должна быть включена.
<?php
$userId = "0"; //This deeclares it a String FYI not an Int in technical terms...
$stmt = $dbh->prepare("CALL sp_returns_string(?)");
$stmt->bindParam(1, $userId, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000)
// call the stored procedure
$stmt->execute();
print "procedure returned $return_value\n";
?>
Подробнее см. http://php.net/manual/en/pdostatement.bindparam.php.
В ответ на вопрос, стоит ли использовать ... это зависит.Если вы создаете функцию PHP, то есть getUserName ($ id), то нет, это того не стоит, вы можете использовать функцию PHP и изменять ее по мере продвижения ... Предполагая, что вы разрабатываете это для одного приложения PHP или с повторно используемым PHPclass.
Если вы хотите позволить людям, возможно, использовать API для его запуска и т. д. без вмешательства или если вы намереваетесь использовать этот запрос для нескольких приложений (например, PHP, ASP, а также, возможно, приложение для настольных компьютеров и т. д.).и т. д.) тогда лучше использовать MySQL в качестве места жительства.
Лично я предпочитаю функции PHP в случае, если вам нужно портировать базы данных и т. д., а также простоту добавления более сложной логики к результату запроса и т. д.и Функции для меня ограничены при рассмотрении миграции ...
Добавлено примечание - Процедуры и функции разные.Вы использовали оба имени.В этом случае я предполагаю из кода процедуру, но обязательно пойму, что вы используете и почему.Они предназначены для разных вещей.