2012-05-16 7 views
9

Próbowałem użyć LIKE wewnątrz przygotowanej instrukcji, ale php nie wykona instrukcji z powodu błędu składni spowodowanego użyciem symbolu wieloznacznego%.Używanie znaków wieloznacznych wewnątrz pg_prepare

Oto kod

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

Chodzi o to, że PHP pokazuje mi ostrzeżenie w drugim wierszu, twierdząc błąd składni.

Dziękuję bardzo z góry !!!

+0

jaki dokładnie błąd? – zerkms

+2

Niezbyt dobrze znany z postgresql, ale domyślam się, że musisz przekazać% w rzeczywistej wartości, a nie w powiązaniu. Podobnie jak array ($ my_param. '%'). – Corbin

+0

Dzięki Corbin, rzeczywiście rozwiązanie było tym, które podałeś :) – danielrvt

Odpowiedz

10

Posiadałem identyczne parametry wiązania przy użyciu adapterów PDO. Rozwiązaniem jest przekazać w "%" ze zmienną:

$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."%")); 

Jeśli potrzebujesz

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

Następnie zapytanie będzie:

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

Dobrze. Błąd składniowy pochodzi z cytowania. zamienia się w "LIKE" niezależnie od "%" zamiast "LIKE", niezależnie od% "'. Więc tak, umieść dzikie karty w parametrze, a nie w szablonie. –

+0

Dzięki za odpowiedź facetów !!! bardzo mi to pomogło !!! :) – danielrvt

Powiązane problemy