2016-02-16 2 views
0

У меня есть проблема с хранимой процедурой при назначении значения параметра. задаю значение в качестве даты '2016-05-01','2016-07-30'PHP escape хранимой процедуры param

Процедура отлично работает, когда я ручной ввести дату, как это:

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 

возвращения пустого массива

ли мне нужно бежать это два variales. Я также пытаюсь это сделать, а не работать!

$price = $db->query("CALL calculateSeasonPrice(".$carID.",".$sDate.",".$eDate.")"); // This work 

Что я пропущу здесь?

+0

'' $ carID'' может быть. – AbraCadaver

+0

http://php.net/manual/en/mysqli.error.php к вашему запросу. –

ответ

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, который вы выбираете для своей работы.

Смежные вопросы