2013-07-26 21 views
6

Teraz mam użyć następującą strukturę uporać się z wiązania wielu parametrów do mysqli kwerendy:Bind wiele parametrów do zapytania mysqli

if ($words_total == 1) 
{ 
    $statement -> bind_param("s", $words[0]); 
} 
else if ($words_total == 2) 
{ 
    $statement -> bind_param("ss", $words[0], $words[1]); 
} 
else if ($words_total == 3) 
{ 
    $statement -> bind_param("sss", $words[0], $words[1], $words[2]); 
} 

//and so on.... 

ćwiczę liczbę znaków zapytania za pomocą poniższego kodu i wstaw to do mojego zapytania:

$marks = ""; 
for($i = 1; $i<=$words_total; $i++) { 
    if ($i == $words_total) 
    { 
     $marks .= "?"; 
    } 
    else 
    { 
     $marks .= "?,"; 
    } 
} 

Moje pytanie z pewnością musi być sposobem na obsłużenie jak największej liczby wejść do zapytania, ponieważ potrzebuję go dynamicznie. Hardcoding the bind_param() wydaje się być naprawdę złym sposobem radzenia sobie z tym.

używam php w wersji 5.4.10

Odpowiedz

14

tu idzie rozwiązanie lub rzeczywisty problem wiążący zmienną liczbę wartości do mysqli przygotowane oświadczenie:

<?php 
$values = array('b','c','d'); 

$in = str_repeat("?,", count($values)); 
$in = trim($in, ","); 

$sql = "SELECT * from users where username in($in)"; 
$stm = $con->prepare($sql); 

$types = str_repeat("s", count($values)); 

if (strnatcmp(phpversion(),'5.3') >= 0) 
{ 
    $bind = array(); 
    foreach($values as $key => $val) 
    { 
     $bind[$key] = &$values[$key]; 
    } 

} else { 

    $bind = $values; 
} 

array_unshift($bind, $types); 
call_user_func_array(array($stm, 'bind_param'), $bind); 

#var_dump($sql, $types, $bind, $con->error); 

$stm->execute(); 
$res = $stm->get_result(); 
while($row = $res->fetch_assoc()) var_dump($row); 

skomentowane linia jest przeznaczona wyłącznie do testowania rozwoju . Niezwykle przydatny.

Ale początkowy problem polegał na braku zgłaszania błędów.

Zepsuło to nie tylko w tym konkretnym przypadku, ale także całe twoje doświadczenie z PHP.
Za każdym razem, gdy coś pójdzie nie tak, PHP powie ci - co się stało i kogo winić. Tylko jeśli na to pozwolisz. I zawsze powinieneś.

Możesz przeczytać ten answer on error reporting basics

Chociaż mając komunikat o błędzie, można po prostu google dla niego i znaleźć rozwiązanie w sekundach. Lub przynajmniej dowiesz się, jaki masz problem. Które jest faktycznie zachowanie funkcji call_user_func_array(), która została nagle zmieniona.

+0

Wielkie dzięki za to - dosłownie rozpaczałem nad moim brzydkim rozwiązaniem tego problemu. Zgadzam się, że zgłaszanie błędów jest moją słabością, że muszę poświęcić czas, aby dowiedzieć się więcej. Nauczyłem się php tylko 2 miesiące temu, więc do tej pory chodziło tylko o to, aby móc robić jak najwięcej. Teraz myślę, że być może powinienem bardziej skupić się na robieniu rzeczy tak dobrze, jak to możliwe !! Uściski i dzięki! –

Powiązane problemy