{«статус»:{«ошибка»: «SQLSTATE[HY093]: недопустимый номер параметра: количество связанных переменных не соответствует количеству токенов»}}

#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]);