2012-05-16 3 views
9

Ho cercato di utilizzare LIKE all'interno di un'istruzione preparata, ma php non eseguirà l'istruzione a causa di un errore di sintassi dovuto all'utilizzo del carattere jolly%.Utilizzo di caratteri jolly LIKE all'interno di pg_prepare

Ecco il codice

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

Il fatto è che il PHP mi mostra un messaggio di avviso nella seconda riga valere un errore di sintassi.

Grazie mille in anticipo !!!

+0

Che errore esatto? – zerkms

+2

Non ho molta familiarità con postgresql, ma la mia ipotesi è che è necessario passare la% nel valore effettivo, non sull'associazione. Come array ($ mio_param. '%'). – Corbin

+0

Grazie Corbin, infatti la soluzione è stata quella che hai fornito :) – danielrvt

risposta

10

Ho avuto lo stesso problema con i parametri di binding usando gli adattatori PDO. La soluzione è quella di passare il "%" con la variabile:

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

Se avete bisogno di

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

Poi la query sarebbe:

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

Giusto. L'errore di sintassi è da citare. si trasforma in 'LIKE 'qualunque sia'%' invece di 'LIKE 'qualunque sia%''. Quindi sì, metti le wild card nel parametro, non nel template. –

+0

Grazie per la risposta ragazzi !!! mi ha aiutato molto !!! :) – danielrvt