#php #mysql #slim
#php #mysql #тонкий
Вопрос:
$app->get('/view/appointment/:databaseID/:userID/:appointmentID', function($databaseID, $userID, $appointmentID) use($app) {
$params['databaseID'] = $databaseID; //$request->getAttribute('databaseID');
$id = $userID; //$request->getAttribute('userID');
$date = $appointmentID; //$request->getAttribute('appointmentID');
$sql = "SELECT imapt_date, imapt_start_time, imapt_end_time, imapt_patient_id, imapt_procedure
from im_ap_timetable inner join im_practioner on
im_ap_timetable.impract_id=im_practioner.impract_id inner join
im_users_cd on im_practioner.user_id=im_users_cd.user_id
where im_users_cd.user_id = :id and im_ap_timetable.imapt_date = :date";
try {
$db = getDB($params['databaseID']);
$stmt = $db->prepare($sql);
$query = compact('id');
$stmt->execute($query);
$patient = $stmt->fetchAll(PDO::FETCH_ASSOC);
$status = array('success' => '200');
echo json_encode(compact('patient','status'));
} catch (Exception $e) {
$status = array('error' => $e->getMessage());
echo json_encode(compact('status'));
}
});
Комментарии:
1. … и ваш вопрос?
2. Я тестировал /view/appointment/clientDemo/25 /2016-01-14 на postman. Однако я получаю {«status»:{«error»:»SQLSTATE[HY093]: недопустимый номер параметра: количество связанных переменных не соответствует количеству токенов»}} . По праву система должна ответить в формате json со списком значений, которые я хочу
Ответ №1:
У вас есть два заполнителя: :id
и :date
.
Но вы привязываете только одну — :id
.
Вам :date
тоже нужно привязать. В вашем случае это:
$query = compact('id', 'date');
Комментарии:
1. Спасибо. Я все еще новичок в этом
Ответ №2:
Вы можете использовать bindParam
метод для привязки параметров к вашему SQL-запросу.
http://php.net/manual/en/pdostatement.bindparam.php
Вы также можете передать их в массив в вашем execute
методе.
$stmt->execute($query, [':id' => $id, ':date' => $date]);