在Zend Framework中有没有办法调用MySQL存储函数(不是过程)?或者绕过框架使用未过滤的PHP代码?在Zend Framework中调用MYSQL存储函数(非存储过程)
在'pure'php应用程序中,下面的代码工作 - 使用mysqli db连接(不是mysql)。但是在Zend框架中,这段代码不会导致应用程序错误,但也不会将结果绑定到php变量。
如果您使用Zend_Db适配器,我无法找到将函数的结果绑定到变量(从而得到答案 - 没有Zend_Db方法等同于'bind_result')。
我看过以前的问题,但他们专注于存储过程(例如How can I use a stored procedure in a MySql database with Zend Framework?)。
谢谢。
更新:自写以来,我发现这与MAMP上的MYSQL正常工作,但与Mac上的Zend Server CE上的MYSQL无关。
MySQL存储功能:
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
PHP代码调用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;
如果需要,您可以使用该框架内的“纯” PHP。我不使用任何框架数据库函数,它只是工作。 – Lobo 2012-01-02 09:47:38
我其实不认为Zend对UDF有很大的支持。我有过UDF通过Zend调用导致奇怪的PHP错误的经验。但是,通过PHP的'mysqli'函数调用同一个UDF的工作。 – 2012-01-03 02:25:23