11. august 2014 - 13:56Der er
5 kommentarer og 1 løsning
PHP PDO BindValue med samme variabel flere steder i SELECT
Hej, jeg er ny i PDO og har nu kastet mig ud i konvertering af mit mest avanceret PHP-script: søgemaskinen. Nedenstående afsnit virker, men er der ikke en enklere metode at afvikle bindValue på, når det nu er samme variabel, som optræder flere steder i SELECT?
$foresp = $database->prepare("SELECT * FROM tabel WHERE fdatosort LIKE ? OR ddatosort LIKE ? OR fdato LIKE ? OR ddato LIKE ?"); $foresp->bindValue(1, "%$find%", PDO::PARAM_STR); $foresp->bindValue(2, "%$find%", PDO::PARAM_STR); $foresp->bindValue(3, "%$find%", PDO::PARAM_STR); $foresp->bindValue(4, "%$find%", PDO::PARAM_STR);
Har forsøgt med én enkelt navngivning: ':find' i stedet for ? og fortløbende numre. Kan man bruge noget foreach og/eller bindParam - Har nogen et godt bud på en løsning her?
Når du binder en variable skal du bruge bindParam, jeg ville skrive det noget lign dette:
$find = '%' . $find . '%';
$foresp = $database->prepare("SELECT * FROM tabel WHERE fdatosort LIKE :fdatosort OR ddatosort LIKE :ddatosort OR fdato LIKE :fdato OR ddato LIKE :ddato"); $foresp->bindParam(':fdatosort', $find, PDO::PARAM_STR); $foresp->bindParam(':ddatosort', $find, PDO::PARAM_STR); $foresp->bindParam(':fdato', $find, PDO::PARAM_STR); $foresp->bindParam(':ddato', $find, PDO::PARAM_STR);
Synes godt om
Slettet bruger
11. august 2014 - 14:17#2
Et lille edit: Man "skal" selvfølgelig ikke nødvendigvis bruge bindParam :)
OK - så man skal have en 'bind' linie for hver forekomst i SQL selvom værdien er den samme?
Synes godt om
Slettet bruger
11. august 2014 - 14:45#4
Jeg mener faktisk godt at man kan bruge værdien flere gang, altså så du kun har én bindParam, hvilket som du selv siger også giver mest mening da det er den samme værdi, jeg tænkte ikke så meget over det, jeg skrev blot en hurtig lille løsning udfra den eksisterende kode :)
Ja, det virker fint med de 4 nævnte bindValue linier.
Jeg har som nævnt ledt efter en enklere løsning med færre antal bind linier, evt. i et foreach loop, det kunne jeg dog kun finde i et eksempel med et array indeholdende forskellige værdier og så én bindParam i et foreach loop.
Kan dog ikke finde noget på, hvis samme variabel skal testes flere steder i samme SQL. Jeg har nemlig også en mere avanceret SQL med flere gentagne værdier, her har jeg så foreløbig begrænset mig til kun at binde de variabler, der er det reelle brugerinput fra HTML-formularen i søgemaskinen og ikke de variabler til SQL'en som jeg selv genererer i scriptet.
Tak for det alternative script - du få pointene :-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.