2013-05-17 20 views
18

Mam kwerendy mysql, ale nie może wiązać param bojak powiązać wiele parametrów do MySQLi zapytania

SELECT users.email,users.handle,userprofile.mobile FROM users,userprofile WHERE users.email =? OR users.handle =? OR userprofile.mobile=? 

Próbowałem poniżej linii

$query = "SELECT users.email,users.handle,userprofile.mobile FROM users,userprofile WHERE users.email =? OR users.handle =? OR userprofile.mobile=?"; 
$stmt = $mysqli->prepare($query); 
$stmt->bind_param("sss",$email,$username,$mobile); 
if ($stmt->execute()) { 
if($stmt->num_rows){ 
    echo '......'; 
    } 
} 

ale mam otrzymane i błąd:

Ostrzeżenie: mysqli_stmt :: bind_param(): Liczba elementów w definicji typu ciąg nie pasuje do liczby zmiennych powiązań

+0

Możesz opublikować cały kod zapytań wraz z pełną przygotować nie tylko instrukcja SQL – Dave

+1

Właściwie po prostu wyrecytowałem twoje używanie bindParam jego faktycznie $ stmt-> bind_param(), gdy podajesz wiele parametrów w taki sam, jak twój przykład – Dave

+0

"sss" oznacza, że ​​3 zmienne, które chce związać są wszystkie ciągi znaków i on przekazuje wszystkie 3 zmienne naraz, więc musi użyć bind_param, a nie bindparam. Powinien używać go tylko bez _, jeśli będzie wiązał każde wejście indywidualnie, jak w poniższym przykładzie. – Dave

Odpowiedz

25

To jest poprawna składnia dla wiążących params w mysqli

$SQL = "SELECT 
       users.email, 
       users.handle, 
       userprofile.mobile 
     FROM users,userprofile  
     WHERE users.email =? OR users.handle =? OR userprofile.mobile=?"; 

if ($stmt = $mysqli->prepare($SQL)) { 

    $stmt->bind_param("sss", $one,$two,$three); 
    $stmt->execute(); 

    //do stuff 
} 
+0

To jest poprawne :). dziękuję. Jestem zainteresowany wyglądem Gdzie jest mój zły –

+0

@ AF.P witasz – Fabio

+0

czy mogę wywołać bind_params 3 razy dla wiązania różnych argumentów, jeśli otrzymałem je jako tablicę? – mebjas

4

Spróbuj tego ...

$stmt = $dbConn->prepare("SELECT users.email,users.handle,userprofile.mobile FROM users,userprofile WHERE users.email = ? OR users.handle = ? OR userprofile.mobile= ?"); 
$stmt->bind_param("sss", $email, $handle, $mobile); 
$stmt->execute(); 
Powiązane problemy