分配参数值时,存储过程存在问题。
我将值指定为日期'2016-05-01','2016-07-30'
当我手动输入日期时,程序正常工作:
CALL calculateSeasonPrice(3, '2016-05-01','2016-07-30')
带数据的成功返回数组。
但问题是我将变量指定为参数
$carId = 3;
$sDate = '2016-05-01';
// and
$eDate = '2016-07-30';
$price = $db->query("CALL calculateSeasonPrice({$carID},{$sDate},{$eDate})"); // problem
返回空数组
我是否需要逃避这两个变种。我也试过这个而不行!
$price = $db->query("CALL calculateSeasonPrice(".$carID.",".$sDate.",".$eDate.")"); // This work
我想念的是什么?
答案 0 :(得分:1)
在您尝试使用变量的查询中,您忘记了值的引号:
$price = $db->query("CALL calculateSeasonPrice('$carID','$sDate','$eDate')");
如果您使用prepared语句,则不会遇到这些问题。您可以详细了解PDO和MySQLi的准备好的陈述。
PDO示例:
$carId = 3;
$sDate = '2016-05-01';
$eDate = '2016-07-30';
$price = "CALL calculateSeasonPrice(?,?,?)";
$queryResults = $dbh->prepare($price);
$queryResults->execute(array($carId, $sDate, $eDate));
MySQLi示例:
$price = "CALL calculateSeasonPrice(?,?,?)";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("iss", $carId, $sDate, $eDate);
$stmt->execute();
从根本上说,这些并没有太大的不同,但根据您为工作选择的API,您需要习惯一些微妙的元素。