2014-06-28 2 views
0

Я относительно новичок в PHP и работаю над привязкой к обучению. Я получаю ошибку связывания:отладка простая ошибка bind_param

«mysqli_stmt :: bind_param(): Количество переменных не соответствует числу параметров в подготовленном заявлении»

if(isset($_GET['last_name'],$_GET['id'])) { 
    $last_name = trim($_GET['last_name']); 
    $id = trim($_GET['id']); 
    $people = $db->prepare("select firstName, last_name, id from people where last_name = ? or id >= ?"); 
    $people->bind_param('ssi', $first_name, $last, $id); 
    $people->execute(); 
    $people->bind_result($first_name, $last, $id); 

я получаю ошибку на bind_param линии , У меня есть ssi, который я имел в виду как string, string, integer, и у меня есть три переменные. В моем выборе у меня есть три правильно названных поля. Если я перейду на «si» и удалю одно из полей имени, он отлично работает. Я озадачен, почему добавление второй строки не работает

+0

У вас могут быть три переменные, но я могу видеть только два '?' Placeholders ... –

ответ

0

у вас есть два знака вопроса в этой статье:.

«выберите ПгвЬЫате, last_name, идентификатор из людей, где last_name =? или идентификатор> =?»

(Обратите внимание на camelCases ПгвЬЫат пары и подчеркнутые остальной Params, это хорошая практика, чтобы придерживаться одной именования, чтобы избежать проблем)

означает, что вы хотите связать - Титулы, но в следующей строке Вы пытаетесь поставить 3 Params

$ человек-> bind_param ('ГНУ', $ first_name, $ last_name, $ ID)

Удалить $ first_name переменная от bind_param и 's' от типов.

Это должно выглядеть следующим образом:

$ человек-> bind_param ('си', $ last_name, $ ID)

ПРИМЕЧАНИЕ: Ваш $ последний и $ first_name переменные не определены.

+0

Я согласен с соглашениями об именах, но это правильные имена полей в БД. Я все еще не уверен, что понимаю, почему это не работает. Не выбран ли мой выбор для трех выбранных полей? Почему предложение where, извлекающее два поля, имеет какое-либо отношение к числу полей, которые я хочу связать? Возможно, я просто не понимаю, что такое привязка. Почему я не могу иметь какое-либо количество вопросительных знаков и назначать (связывать) любое количество полей? – DVDmmike

+0

"выберите firstName, last_name, id от людей, где last_name =? Или id> =?" Вы выбрали 3 поля ** - firstName, last_name, id из таблицы людей с ** 2 условиями **: lasnt_name =? или id> =? поскольку вы не указываете, что эти 2 условия просто помещают вопросительные знаки в качестве заполнителя. Вы должны привязать 2 параметра к этим заполнителям. Вы должны всегда связывать равное количество переменных с числом «?» в statement.Where предложение не извлекает 2 поля. Вы всегда извлекаете 3 поля с этим утверждением, но фильтруются этими двумя условиями, которые вы должны связать, потому что вы не укажете его. – szymanskilukasz

+0

Вы должны всегда связывать равное количество переменных с числом '?' в statement.Where предложение не извлекает 2 поля. Я предполагаю, что я пытаюсь сделать, отличается от того, что действительно является обязательным, поэтому я не понимаю, как правильно привязываться. То, что я собирался сделать позже, было циклом while для извлечения трех полей, хотя я только извлекал точки данных от пользователя. Хотя ($ people-> fetch()) Так что я предполагаю, что мне нужно изменить выбор привязки, чтобы быть только двумя, поскольку у вас есть состояние, и меняйте цикл while, чтобы вместо этого использовать новый критерий выбора. – DVDmmike

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