2012-02-10 3 views
4

сказать, если у меня есть запрос select users.user_id, users.fname, users.lname, bios.bio, groups.groupid from users LEFT JOIN bios on users.user_id = bios.userid, тогда я хочу добавить другую таблицу в состояние, а затем добавить заявление where в конце. Проблема в том, что, когда я связываю параметр, он сказал, что «число переменных не совпадает с числом переменных в инструкции подготовки». Как я могу это решить? Приветствия. Пример:Построение запросов mysqli?

$info = "select users.user_id, users.fname, users.lname, bios.bio, groups.groupid from users LEFT JOIN bios on users.user_id = bios.userid"; 
    $content = $members->prepare($info); 
    if ($_GET['where'] == 'requests') $info .= "LEFT JOIN requests on users.user_id = requests.receiver"; 
    else if ($_GET['where'] == 'referrals') $info .= "LEFT JOIN referrals on users.user_id = referrals.receiver"; 
    $info .= "where users.user_id = ?"; 
    $content->bind_param('s', $_SESSION['token'][1]); 
    $content->execute(); 

ответ

3

Вы меняете строку SQL после ее подготовки. Не делай этого. Сделайте это следующим образом:

$info = "select users.user_id, users.fname, users.lname, bios.bio, groups.groupid from users LEFT JOIN bios on users.user_id = bios.userid"; 
if ($_GET['where'] == 'requests') $info .= " LEFT JOIN requests on users.user_id = requests.receiver"; 
else if ($_GET['where'] == 'referrals') $info .= " LEFT JOIN referrals on users.user_id = requests.receiver"; 
$info .= " where users.user_id = ?"; 
$content = $members->prepare($info); 
$content->bind_param('s', $_SESSION['token'][1]); 
$content->execute(); 

Редактировать: Также убедитесь, что ваши фрагменты SQL разделены пробелами, где это необходимо; Оператор .=не автоматически добавит вам место.

+0

ahaha can not считаю, что я этого не осознавал, спасибо! хр –