2013-05-17 13 views
18

Tôi có một truy vấn mysql, nhưng tôi không thể ràng buộc param cho nócách để ràng buộc nhiều tham số để MySQLi truy vấn

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

Tôi đã thử bên dưới dòng

$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 '......'; 
    } 
} 

nhưng tôi đã đã nhận và lỗi:

Cảnh báo: mysqli_stmt :: bind_param(): Số lượng thành phần trong loại Chuỗi định nghĩa không khớp với số biến liên kết

+0

Bạn có thể gửi toàn bộ mã truy vấn của bạn bao gồm đầy đủ chuẩn bị không chỉ là tuyên bố sql – Dave

+1

Trên thực tế chỉ cần relased của bạn bằng cách sử dụng bindParam của nó thực sự $ stmt-> bind_param() khi bạn đang đi qua nhiều tham số giống như ví dụ của bạn – Dave

+0

"sss" có nghĩa là 3 biến ông muốn ràng buộc là tất cả các chuỗi và anh ấy vượt qua tất cả 3 biến trong cùng một lúc vì vậy anh ta cần phải sử dụng bind_param không bindparam. Anh ta chỉ nên sử dụng nó mà không có _ nếu anh ta sẽ ràng buộc từng đầu vào riêng lẻ như trong ví dụ dưới đây. – Dave

Trả lời

25

Đây là cú pháp chính xác cho params ràng buộc trong 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

Điều này đúng :). cảm ơn bạn.Tôi muốn xem đâu là sai của tôi –

+0

@ AF.P bạn chào mừng – Fabio

+0

tôi có thể gọi bind_params 3 lần để ràng buộc đối số khác nhau nếu tôi nhận được chúng dưới dạng mảng không? – mebjas

4

Hãy thử này ...

$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();