进入存储过程,需要帮助转换查询

时间:2013-02-15 22:28:05

标签: php mysql stored-procedures

我从未使用过存储过程,但是当我需要将查询移动到服务器时,我遇到了一个现实。请协助。

这是我通过PHP创建的函数:

function getResults($userid) {
        $query = "select * from myTable where iduser= ?";
        $stmt = $this->openDb()->prepare($query);
        $stmt->bindValue(1, $userid, PDO::PARAM_INT);
        $stmt->execute();
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $rows;
    }

我从未使用存储过程而不确定如何处理:

  1. 如何将此作为存储过程添加到MySQL,以便我可以提交 一个整数变量
  2. 如何“准备”我将提交给存储过程的整数变量
  3. 如何从存储过程中将结果集检索回php 功能
  4. 如果您可以提供帮助,我会审核您的解决方案,并且可以自行继续。

    我检查了谷歌,我看到要创建一个存储过程,我需要像这样开始:

    CREATE PROCEDURE `getResults` (IN userid INT)  
    BEGIN  
    
    END
    

1 个答案:

答案 0 :(得分:1)

<强> MYSQL:

DELIMITER $$

DROP PROCEDURE IF EXISTS getResults$$

CREATE PROCEDURE getResults(IN I_USERID INT(10))
BEGIN
    SELECT * FROM `myTable` WHERE iduser = I_USERID;
END$$

DELIMITER ;

<强> PHP:

$sql = "CALL getResults(?)";
$stmt = $this->openDb()->prepare($sql);
$stmt->execute(array($userid));

while ($row = $stmt->fetchObject()) {
    //use fields like this: $row->fieldname1, $row->fieldname2...
}
$stmt->closeCursor();

在旁注中,我建议明确命名您的字段,而不是在查询中使用*选择器。

希望它有所帮助, S上。