我刚开始学习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。你能给我一些提示如何使这项工作吗?
答案 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);
在这种情况下不需要第三个参数。