2012-05-16 41 views
9

Tôi đã cố gắng sử dụng LIKE bên trong câu lệnh đã chuẩn bị, nhưng php sẽ không thực thi câu lệnh vì lỗi cú pháp do sử dụng ký tự đại diện%.Sử dụng ký tự đại diện LIKE bên trong pg_prepare

Đây là mã

$query = pg_prepare($conn, "MyStatement", 
    'SELECT "Query" from "MyTable" 
    WHERE "Query" LIKE $1% 
    ORDER BY "MyColumn" DESC;'); 

$result = pg_execute($conn, "MyStatement", array($my_param)); 

Cái này là php chỉ cho tôi một lời cảnh báo ở dòng thứ hai tuyên bố một lỗi cú pháp.

Cảm ơn bạn rất nhiều trước !!!

+0

gì lỗi chính xác? – zerkms

+2

Không phải là rất quen thuộc với postgresql, nhưng tôi đoán là bạn cần phải vượt qua% trong giá trị thực tế, không phải trên ràng buộc. Giống như mảng ($ my_param. '%'). – Corbin

+0

Cảm ơn Corbin, thực sự giải pháp là giải pháp bạn cung cấp :) – danielrvt

Trả lời

10

Tôi đã có cùng thông số ràng buộc vấn đề khi sử dụng bộ điều hợp PDO. Giải pháp là để vượt qua "%" với biến:

$query = pg_prepare($conn, "MyStatement", 
'SELECT "Query" from "MyTable" 
WHERE "Query" LIKE $1 
ORDER BY "MyColumn" DESC;'); 

$result = pg_execute($conn, "MyStatement", array($my_param."%")); 

Nếu bạn cần

...LIKE '%param%' ... 

Sau đó truy vấn của bạn sẽ là:

$result = pg_execute($conn, "MyStatement", array("%".$my_param."%")); 
+0

Phải. Lỗi cú pháp là từ trích dẫn. nó biến thành 'LIKE 'bất cứ cái gì'%' thay vì 'LIKE 'cho dù%''. Vì vậy, yeah, đặt các thẻ hoang dã trong tham số, không phải là mẫu. –

+0

Cảm ơn các bạn đã trả lời !!! Nó đã giúp tôi rất nhiều!!! :) – danielrvt

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