【发布时间】:2015-06-03 12:09:49
【问题描述】:
下面是我的存储过程:
DELIMITER $$
--
-- Procedures
--
DROP PROCEDURE IF EXISTS `checkLogin`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `checkLogin`(IN `uname` VARCHAR(255), IN `pwd` VARCHAR(255))
BEGIN
SELECT a.id, a.role_id, b.name FROM userTable as a
LEFT JOIN roleTable as b on b.id = a.role_id
WHERE a.username = uname AND password = pwd;
END$$
DELIMITER ;
下面是我的执行代码:
$stmt = $this->dbCon->prepare("CALL checkLogin(?, ?)");
$stmt->bindParam(1, $email, PDO::PARAM_STR, 4000);
$stmt->bindParam(2, $password, PDO::PARAM_STR, 4000);
// call the stored procedure
$stmt->execute();
//var_dump($res);
$op = ( $stmt ) ? $stmt->fetchAll(PDO::FETCH_ASSOC) : '';
echo '<pre>'; print_r($op); die;
上面$this->dbCon是我的PDO对象。
当我执行此代码时,我只得到空结果。但是当我通过 phpmyadmin 运行该程序时,它工作正常。
如果我通过命令行执行,即使它工作正常:
我也尝试了以下方法(从答案中收到),但仍然不成功
$stmt = $db->prepare("Call checkLogin(?,?);");
$stmt->execute(array($email,$password));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (count($rows) == 0)
echo 'Failed Login!'."\n";
else
echo 'Logged In...'."\n".print_r($rows,true);
【问题讨论】:
-
这是因为您的分隔符
$$正在停止DROP PROCEDURE行上的过程。 MySQL Stored Procedures 通常,您使用的分隔符不正确,如图所示。 -
@JayBlanchard 创建存储过程没有问题。此外,当我从 phpmyadmin 窗口执行该过程时,它会显示正确的结果。当我通过 pdo 执行时,它显示空结果..
标签: php mysql stored-procedures pdo