2011-01-14 5 views
0

Я только что начал изучать php pdo и подключился к базе данных mysql и выполнил простой оператор SELECT. У меня есть хранимая функция, которую я создал перед использованием pdo, действительно ли мне нужно использовать хранимые функции/процедуры при использовании PDO?PHP PDO и сохраненная функция

BEGIN 

    DECLARE new_username VARCHAR(32); 

    SELECT `username` 
     INTO new_username 
     FROM `users` 
    WHERE `userID` = ID; 

RETURN COALESCE(new_username, 'Invalid ID'); 

END 

Есть ли смысл использовать вышеуказанную функцию, если я делаю это с использованием PDO? Функция будет расширена для других выборок и т. Д. У меня также возникла проблема с вызовом функции с использованием PDO.

include ('connection.php'); 

$userID = 0; 
$stmt = $db->prepare("SELECT username(:user_id)"); 
$stmt->bindParam(':user_id', $userID, PDO::PARAM_INT); 
$stmt->execute(); 
$result = $stmt->fetch(PDO::FETCH_OBJ); 
echo $result->new_username; 

Любой совет?

ответ

2

Для хранимой процедуры вам нужно немного изменить свой синтаксис. Обратите внимание, что длина должна быть включена.

<?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 или с помощью многоразового PHP класс.

Если вы хотите, чтобы люди, возможно, использовали API для его запуска и т. Д. Без вмешательства или если вы планируете использовать этот запрос для нескольких приложений (например, PHP, ASP, возможно, приложение для рабочего стола и т. Д. И т. Д.), То используя MySQL как место проживания лучше.

Лично я предпочитаю PHP функции в случае, если у вас есть к базам данных портов и т.д., и легкость, в которой, чтобы добавить более сложную логику для результата запроса и т.д. Процедуры MySQL и функции для меня являются сдерживающим при рассмотрении вопроса о миграции ...

Добавлено Примечание. Процедуры и функции различны. Вы использовали оба имени. В этом случае я исхожу из кода его процедурой, но не забудьте понять, что вы используете и почему. Они предназначены для разных вещей.

+0

'PDO :: PARAM_INT' должен сделать' '1' 'стать' 1', используя тип casting fyi. – RobertPitt

+0

opps Я забыл изменить свой идентификатор пользователя, извините, что он предназначен для Int, код выше - это функция, так как он возвращает имя пользователя. Я еще не использовал процедуры, но я поставил это в свой вопрос, когда я действительно их использую. Спасибо, что попробуем. – Elliott

+0

PHP печатает «процедура возвращена», но ничего после этого? Спасибо – Elliott

Смежные вопросы