2013-04-27 30 views
25

Tôi muốn thực hiện truy vấn mysql sau:PDO chuẩn bị phát biểu với các kí hiệu

SELECT * FROM `gc_users` WHERE `name` LIKE '%anyname%' 

Tôi cố gắng này không thành công:

$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); 
$stmt->bindParam(':name', "%" . $name . "%"); 
$stmt->execute(); 

$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE '%:name%'"); 
$stmt->bindParam(':name', $name); 
$stmt->execute(); 

Vì vậy, tôi hỏi bạn nếu nó có thể sử dụng các ký tự đại diện% với các phát biểu đã chuẩn bị.

/chỉnh sửa

Cảm ơn bạn. làm việc với bindValue:

$stmt = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` LIKE :name"); 
$stmt->bindValue(':name', '%' . $name . '%'); 
$stmt->execute(); 
+3

Đối với nỗ lực đầu tiên của bạn - thay đổi ' bindParam' đến 'bindValue' và chuyển [báo cáo lỗi cho PDO] (http://stackoverflow.com/questions/15990857/reference-frequently-asked-questions-about-pdo#15990858) –

Trả lời

23

Nó có thể làm việc với các ràng buộc param quá trong cách sau:

$name = "%$name%"; 
$query = $dbh->prepare("SELECT * FROM `gc_users` WHERE `name` like :name"); 
$query->bindParam(':name', $name); 
$query->execute(); 
+0

Không chắc chắn tại sao điều này lại bị dow n bình chọn nhưng xin lưu ý giải pháp này cũng hoạt động. :) – Sumoanand

+3

Tôi đoán nó đã được downvoted vì nếu '$ name' của bạn chứa một ký tự đại diện, nó không được thoát. –

+1

Tôi lãng phí thời gian của mình không có bộ ký tự = utf8 trong DSN, tôi tìm kiếm bằng ký tự tiếng Thái. – ittgung

2

Đây có thể là một sự thay thế:

$className = '%' . $this->className . '%'; 
$query->bind_param('s', $className);