L'appel de MYSQL fonctions stockées (pas de procédures stockées) dans le Zend Framework
Est-il un moyen pour appeler un MySQL fonction stockée (pas de procédure) dans le Zend Framework? Ou de travailler dans le cadre de l'utilisation non filtrée code PHP?
Dans une 'pure' application php, le code suivant fonctionne - à l'aide de la mysqli connexion db (pas de mysql). Toutefois, dans le Zend framework, ce code ne sera pas provoquer une erreur d'application mais aussi de ne pas lier le résultat à la variable php.
Si vous utilisez un adaptateur Zend_Db, il n'y a aucun moyen que je peux trouver pour lier le résultat de la fonction à une variable (et donc obtenir la réponse: il n'y a pas de Zend_Db méthode de l'équivalent de "bind_result').
J'ai regardé les précédentes questions, mais ils mettent l'accent sur les procédures stockées (par exemple Comment puis-je utiliser une procédure stockée dans une base de données MySql avec Zend Framework? ).
Grâce.
Mise à JOUR: Depuis la rédaction, j'ai découvert que cela fonctionne bien avec MYSQL sur MAMP, mais pas avec MYSQL sur Zend Server CE sur Mac.
MySQL fonction stockée:
CREATE FUNCTION GetUserAccountType(
inUsername VARCHAR(50)
) RETURNS INT(3)
BEGIN
SELECT AccountType_i INTO @retVal FROM UserTable WHERE Username_vc = inUsername;
RETURN @retVal;
END;
GO
Du code Php à l'appel de la fonction MySQL:
//open mysqli connection with db
$my_db = new mysqli($db_hostname, $db_username, $db_password, $db_database);
// Prepare MySQL function ($userName is a string)
$stmt=$my_db->prepare("SELECT GetUserAccountType(?)") or die($my_db->error);
$stmt->bind_param('s', $userName) or die($stmt->error);
$stmt->execute() or die($stmt->error);
$stmt->bind_result($result);
$stmt->fetch();
//(in php the $result variable is now set as the result of the MySQL function, @retVal.
//In Zend framework, the $result variable is set to FALSE)
return $result;
- Vous pouvez utiliser "pure" de php dans le cadre si vous le souhaitez. Je n'utilise pas du cadre des fonctions de base de données et il fonctionne, tout simplement.
- Je ne pense pas que Zend a un grand soutien pour l'UDF. J'ai eu des expériences où UDF appelé via Zend provoquer d'étranges erreurs php. Toutefois, l'appel de la même UDF via PHP
mysqli
fonctions travaillé.
Vous devez vous connecter pour publier un commentaire.
Je viens de tester à l'aide de votre exemple de fonction stockée. J'ai couru le code suivant et il fonctionne très bien. J'utilise PHP 5.3.6 sur Mac OS X, la connexion à un Percona Server 5.5.18 exemple sur CentOS 6 Linux.
Noter que le jeu de résultats est de retour en utilisant la pleine expression de la clé.
Donc, mon print_r résultats suivants:
Si vous voulez avoir plus classique de la clé, vous devriez donner à la colonne d'un alias.
Par exemple: