【问题标题】:Getting into stored procedures, need help converting a query进入存储过程,需要帮助转换查询
【发布时间】:2013-02-15 22:28:05
【问题描述】:

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

这是我通过 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 功能。

如果您能提供帮助,我将审核您的解决方案,并能够自行继续。

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

CREATE PROCEDURE `getResults` (IN userid INT)  
BEGIN  

END

【问题讨论】:

    标签: php mysql stored-procedures


    【解决方案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.

    【讨论】: