2012-06-20 39 views
27

Tôi đang chạy vấn đề trong việc thực hiện như thế nào trong PDOthực hiện NHƯ truy vấn trong PDO

Tôi có truy vấn này:

$query = "SELECT * FROM tbl WHERE address LIKE '%?%' OR address LIKE '%?%'"; 
$params = array($var1, $var2); 
$stmt = $handle->prepare($query); 
$stmt->execute($params); 

Tôi đã kiểm tra $var1$var2 họ chứa cả những lời tôi muốn tìm kiếm, tôi PDO đang hoạt động tốt vì một số truy vấn của tôi SELECTINSERT chúng hoạt động, chỉ là tôi không quen thuộc ở số LIKE ở đây trong PDO.

Kết quả không được trả lại. $query của tôi có đúng cú pháp không?

Trả lời

61

Bạn phải bao gồm các dấu hiệu % trong $params, không phải trong truy vấn:

$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?"; 
$params = array("%$var1%", "%$var2%"); 
$stmt = $handle->prepare($query); 
$stmt->execute($params); 

Nếu bạn muốn nhìn vào truy vấn tạo ra trong mã trước của bạn, bạn sẽ thấy một cái gì đó như SELECT * FROM tbl WHERE address LIKE '%"foo"%' OR address LIKE '%"bar"%', bởi vì câu lệnh đã chuẩn bị đang trích dẫn các giá trị của bạn bên trong một chuỗi đã được trích dẫn.

+0

+1 cho lời giải thích .. Nhưng tôi không nghĩ rằng có một cách để xem xét các truy vấn được tạo ra .. là có bất cứ điều gì như thế? – Vignesh

+0

Không thể tìm ra điều này cho cuộc sống của tôi và tôi đã quên tất cả về điều này. Câu trả lời tuyệt vời. Cảm ơn! – b3tac0d3

5

Không, bạn không cần báo giá phần giữ chỗ chuẩn bị. Ngoài ra, bao gồm các dấu% bên trong các biến của bạn.

LIKE ? 

Và trong biến: %string%

+0

Hmm, tha thứ nhưng tôi không hoàn toàn chắc chắn làm thế nào để thực hiện những gì bạn vừa đề nghị. –

+0

Tôi đang di động nhưng tôi sẽ cố gắng giải thích tốt nhất có thể. Xem chỉnh sửa của tôi. –

4
$query = "SELECT * FROM tbl WHERE address LIKE ? OR address LIKE ?"; 
$params = array("%$var1%", "%$var2%"); 
$stmt = $handle->prepare($query); 
$stmt->execute($params); 
2

Bạn có thể xem dưới đây ví dụ

$title = 'PHP%'; 
$author = 'Bobi%'; 
// query 
$sql = "SELECT * FROM books WHERE title like ? AND author like ? "; 
$q = $conn->prepare($sql); 
$q->execute(array($title,$author)); 

Hy vọng nó sẽ làm việc.

1

Đơn giản chỉ cần sử dụng như sau:

$query = "SELECT * FROM tbl WHERE address LIKE CONCAT('%', :var1, '%') 
      OR address LIKE CONCAT('%', :var2, '%')"; 

$ar_val = array(':var1'=>$var1, ':var2'=>$var2); 
if($sqlprep->execute($ar_val)) { ... } 
+0

Điều này chậm hơn việc thêm% trực tiếp vào các biến được liên kết. – CristiC

Các vấn đề liên quan