2011-01-14 17 views
0

Ich habe gerade angefangen, in PHP PDO zu suchen und haben sich mit MySQL-Datenbank verbunden und führte eine einfache SELECT Anweisung. Ich habe eine gespeicherte Funktion, die ich vor der Verwendung von PDO erstellt habe. Muss ich tatsächlich gespeicherte Funktionen/Prozeduren verwenden, während ich PDO verwende?PHP PDO und gespeicherte Funktion

BEGIN 

    DECLARE new_username VARCHAR(32); 

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

RETURN COALESCE(new_username, 'Invalid ID'); 

END 

Gibt es einen Punkt die obige Funktion bei der Verwendung, wenn ich dies mit PDO mache? Die Funktion wird für andere Selects usw. erweitert. Ich habe auch ein Problem beim Aufruf der Funktion mit 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; 

Irgendwelche Beratung?

Antwort

2

Für eine Stored Procedure müssen Sie die Syntax leicht ändern. Beachten Sie, dass die Länge enthalten sein muss.

<?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"; 
?> 

Weitere Informationen finden Sie unter http://php.net/manual/en/pdostatement.bindparam.php.

Als Antwort auf, wenn es lohnt sich zu verwenden ... das hängt davon ab. Wenn Sie eine PHP-Funktion erstellen, also getUserName ($ id) dann ist es nicht wert, können Sie die PHP-Funktion verwenden und ändern, wie Sie ... Gehen Sie davon aus, dass Sie dies für eine einzelne PHP-Anwendung oder mit einem wiederverwendbaren PHP entwickeln Klasse.

Wenn Sie möchten, dass die Leute vielleicht eine API verwenden, um es usw. ohne Manipulation zu verwenden oder wenn Sie diese Abfrage für mehrere Anwendungen (zB PHP, eine ASP-Anwendung, vielleicht eine Desktop-App usw.) verwenden wollen MySQL als Wohnort ist besser.

Persönlich bevorzuge ich PHP-Funktionen, wenn Sie zu Port Datenbanken usw. und die Leichtigkeit, mit der eine komplexere Logik auf das Abfrageergebnis usw. MySQL Prozeduren und Funktionen zu mir hinzuzufügen sind Zwangs wenn Migration unter Berücksichtigung ...

Hinweis hinzugefügt - Prozeduren und Funktionen sind anders. Sie haben beide Namen verwendet. In diesem Fall gehe ich davon aus, dass es sich um eine Prozedur handelt, aber vergewissere dich, dass du verstehst, was du verwendest und warum. Sie sind für verschiedene Dinge gedacht.

+0

'PDO :: PARAM_INT' sollte" 1 "' zu '1' machen, indem man type casting fyi verwendet. – RobertPitt

+0

opps Ich habe vergessen, meine userID zu ändern. Es tut mir leid, dass es ein Int war, der obige Code ist eine Funktion, da er den Benutzernamen zurückgibt. Ich habe noch Prozeduren verwendet, aber ich habe das in meine Frage gestellt, wenn ich sie tatsächlich benutze. Danke, versuchen Sie es. – Elliott

+0

PHP druckt "Prozedur zurückgegeben" aber nichts danach? Danke – Elliott