2013-07-24 3 views
0

Я пытаюсь динамически передать некоторые переменные mysqli_stmt::bind_param(), но я застрял (вероятно, есть проблема даже с call_user_func_array):Pass переменной в качестве ссылки на mysqli_stmt :: bind_param()

[..] 
else if($_SESSION['status']==2){ 
     $merge=array('type'=>array(),'val'=>array()); 
     $tail=array(); 
     if($id!=''){ 
      $tail[]='`user_id`=?'; 
      $merge['type'][]='i'; 
      $merge['val'][]=$id; 
     } 
     if($enid!=''){ 
      $tail[]='`ref_id`=?'; 
      $merge['type'][]='s'; 
      $merge['val'][]=$enid; 
     } 
     if($tit!=''){ 
      $tail[]='`title`=?'; 
      $merge['type'][]='s'; 
      $merge['val'][]=$tit; 
     } 
     if($dep!=''){ 
      $tail[]='`department_id`=?'; 
      $merge['type'][]='i'; 
      $merge['val'][]=$dep; 
     } 
     if($opid!=''){ 
      $tail[]='`operator_id`=?'; 
      $merge['type'][]='i'; 
      $merge['val'][]=$opid; 
     } 
     if($op!=''){ 
      $tail[]='`operator_id` IN (SELECT `id` FROM '.$SupportUserTable.' WHERE `name`=? AND 0!=`status`)'; 
      $merge['type'][]='s'; 
      $merge['val'][]=$op; 
     } 
     if($from!=''){ 
      $tail[]='`created_time` <= ?'; 
      $merge['type'][]='s'; 
      $merge['val'][]=$from; 
     } 
     if($to!=''){ 
      $tail[]='`created_time` >= ?'; 
      $merge['type'][]='s'; 
      $merge['val'][]=$to; 
     } 
     if($usmail!=''){ 
      $tail[]='(user_id=(SELECT `id` FROM '.$SupportUserTable.' WHERE `mail`=? LIMIT 1) OR operator_id=(SELECT `id` FROM '.$SupportUserTable.' WHERE `mail`=? LIMIT 1))'; 
      $merge['type'][]='ss'; 
      $merge['val'][]=$usmail.','.$usmail; 
     } 
     $query.=implode(' AND ',$tail); 
    } 
    $prepared = $stmt->prepare($query); 
    if($prepared){ 
     if(call_user_func_array(array($stmt, "bind_param"), array(implode('',$merge['type']), $merge['val']))){ 
[...] 

Это это ошибка:

PHP Warning: Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given in C:\xampp\htdocs\php\function.php on line 2165 

Все варильщики были декалированы перед этим фрагментом кода и являются правильными. Я пытался добавить & перед переменной (например: $merge['val'][]=&$id;), но он говорит, что неожиданный характер (я ожидал эту ошибку, потому что я понятия не имею, что я делаю)
Спасибо заранее

+0

Почему вы хотите сделать это? –

+0

У меня есть форма поиска, и это единственный способ, который прыгнул в голову, чтобы провести исследование, я совершенно новый – Razorphyn

+0

Не думаю, что вам вообще нужно передавать ссылку. Это работает так, как уже написано? –

ответ

1

Проверьте код в классе better_mysqli.php, который я написал, который расширяет mysqli. Он делает именно то, что вы пытаетесь сделать: better_mysqli.php

Эта страница показывает это основное использование: basic_usage.php

На этой странице представлена ​​подробная использование: detailed_usage.php

+0

Я проверю это – Razorphyn

+0

Спасибо, сработало! – Razorphyn

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