2012-10-17 52 views
5

Tôi đang cố gắng viết tìm kiếm từ khóa bằng cách sử dụng các câu lệnh được chuẩn bị PDO. Lý tưởng nhất, tôi muốn sử dụng toán tử LIKE để tìm chuỗi con bên trong giá trị trường. Đây là mã của tôi:Sử dụng toán tử LIKE với% cho tìm kiếm từ khóa với câu lệnh chuẩn bị PDO

$statement = $this->db->prepare("select * from whatever where title like ? or author like ?"); 
$statement->execute(array("%$titleKeyword%","%$authorKeyword%")); 
$rows = $statement->fetchAll(PDO::FETCH_ASSOC); 

Thật không may, $ hàng luôn trống khi tôi dùng thử. Tuy nhiên, nếu tôi sao chép SQL vào phpMyAdmin, và thay thế '% từ khóa%' cho mỗi của? biểu tượng, nó hoạt động tốt (tôi nhận được kết quả khi từ khóa được sử dụng tồn tại).

Tôi cũng đã thử đoạn mã sau:

$statement = $this->db->prepare("select * from whatever where title like :titleKeyword or author like :authorKeyword"); 
$statement->bindValue(":titleKeyword", '%'.$titleKeyword.'%', PDO::PARAM_STR); 
$statement->bindValue(":authorKeyword", '%'.$authorKeyword.'%', PDO::PARAM_STR); 
$statement->execute(); 
$rows = $statement->fetchAll(PDO::FETCH_ASSOC); 

Tôi đã đọc trong một câu hỏi mà bạn có nghĩa vụ phải bao gồm% khi ràng buộc các thông số, không phải trong SQL bản thân (pre-chuẩn bị tuyên bố), nhưng điều đó không hiệu quả.

Tôi có thể sử dụng để chỉ chèn từ khóa trực tiếp vào SQL (sau khi thực hiện một số biện pháp vệ sinh), nhưng tôi muốn gắn với các câu lệnh đã chuẩn bị. Mọi sự trợ giúp sẽ rất được trân trọng.

+1

Chỉ cần thực hiện một mô hình nhanh chóng này và làm việc tốt (PHP 5.3.5) ~ Bạn chắc chắn muốn thêm '%' của bạn khi giá trị ràng buộc. Có thể có vấn đề với $ titleKeyword & $ authorKeyword của bạn? – TerryProbert

+0

Thật không may, không. Tôi đã kiểm tra chúng trước khi đăng lên đây. – Randy

Trả lời

3

thực sự này làm việc cho tôi:

$stmt = $pdo->prepare("select * from t where c like ?"); 
$stmt->execute(array("70%")); 
print_r($stmt->fetchAll()); 

phiên bản PHP nào bạn sử dụng?

+0

Tôi đang sử dụng 5.3.1. Ngay cả một số nhận xét về tài liệu PHP cho PDOStatement gợi ý sử dụng một trong hai phương pháp đó. – Randy

+1

Kiểm tra lại biến của bạn $ titleKeyword và $ authorKeyword (sử dụng '' 'var_dump'''!) – steffen

+0

Đã xong (đây là phiên bản mà tôi sửa đổi các vars để có% trước và sau trước khi tôi gọi bindValue): chuỗi (6) "% iPod%" chuỗi (6) "% iPod%" – Randy

2

Cảm ơn Steffen và Terry đã trợ giúp.

Tôi đã tự giải quyết vấn đề bằng cách chuyển sang bindParam() thay vì bindValue(). Tôi không chắc chắn tại sao tôi không thể làm điều đó với bindValue(), nhưng ngay bây giờ tôi chỉ là quá mệt mỏi để chăm sóc.

+0

Rất vui vì bạn đã tìm ra nó! đọc thêm; http://stackoverflow.com/questions/1179874/pdo-bindparam-versus-bindvalue – TerryProbert

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