PHP转义存储过程参数

时间:2016-02-16 16:30:38

标签: php mysql mysqli

分配参数值时,存储过程存在问题。 我将值指定为日期'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

我想念的是什么?

1 个答案:

答案 0 :(得分:1)

在您尝试使用变量的查询中,您忘记了值的引号:

$price = $db->query("CALL calculateSeasonPrice('$carID','$sDate','$eDate')");

如果您使用prepared语句,则不会遇到这些问题。您可以详细了解PDOMySQLi的准备好的陈述。

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,您需要习惯一些微妙的元素。

相关问题