传递给的参数1必须是int的实例,给定整数

时间:2016-10-19 19:30:57

标签: php mysql

我刚开始学习php,并关注http://www.mysqltutorial.org/php-calling-mysql-stored-procedures/的一个例子。

但得到错误"传递给的参数1必须是int的实例,给定整数..."当我试图跑步时:

   <?php

    require_once 'dbconfig.php';

    /**
     * Get customer level
     * @param int $customerNumber
     * @return string
     */
    function getCustomerLevel(int $customerNumber) {
        try {
            $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);

            // calling stored procedure command
            $sql = 'CALL GetCustomerLevel(:id,@level)';

            // prepare for execution of the stored procedure
            $stmt = $pdo->prepare($sql);

            // pass value to the command
            $stmt->bindParam(':id', $customerNumber, PDO::PARAM_INT);

            // execute the stored procedure
            $stmt->execute();

            $stmt->closeCursor();

            // execute the second query to get customer's level
            $row = $pdo->query("SELECT @level AS level")->fetch(PDO::FETCH_ASSOC);
            if ($row) {
                return $row !== false ? $row['level'] : null;
            }
        } catch (PDOException $e) {
            die("Error occurred:" . $e->getMessage());
        }
        return null;
    }

    $customerNo = 103;
    echo sprintf('Customer #%d is %s', $customerNo, getCustomerLevel($customerNo));

向我看来IN参数的定义已经完成了int。你能给我一些提示如何使这项工作吗?

3 个答案:

答案 0 :(得分:7)

仅从PHP 7.0.0支持标量类型的类型提示/声明(bool,int,float,string)。

请参阅PHP manual / Function arguments以及this answer to similar question

答案 1 :(得分:2)

无需在PHP中输入提示参数。在某些情况下,您可以使用类型提示(对于类非常有用)。 在您的情况下,PHP需要一个int类的实例,它没有定义。您可以使用is_int函数检查传递的参数是否为整数

答案 2 :(得分:0)

您可以用以下方法替换param绑定:

  $stmt->bindParam(':id', $customerNumber);

在这种情况下不需要第三个参数。