10. september 2015 - 21:23
Der er
13 kommentarer og 1 løsning
mysql_query laves om til pdo statement
$search = explode(" ", $search_post); $numrows = sizeof($search); // udtræk fra pernons $query = "SELECT persons.id FROM persons WHERE 1 AND deleted =0"; foreach ($search as $value) { $query .= " AND (firstname LIKE '%".$value."%'"; $query .= " or surname LIKE '%".$value."%'"; $query .= " or nickname LIKE '%".$value."%'"; if (is_int($value*1)) $query .= " or persons.id = '$value'"; $query .= ")"; } $query .= " GROUP BY persons.id ORDER BY firstname asc LIMIT 0,10"; $data = mysql_query($query); $numrows = mysql_num_rows($data); ///////// jeg mangler en god løsning til at lave dette om til en PDO nogle ideer?
Annonceindlæg fra Kingston Technology
11. september 2015 - 03:00
#1
Samme loekke, men du goer to tingen inden i den: 1) opbygger en SQL streng med placeholders som skal prepares 2) opbygger et array med vaerdierme soms kal executes senere og saa preparer du og executer
11. september 2015 - 07:51
#2
Arne_v: får jeg så samme resultet jeg søger ex på "Pet han mek" vel jeg gerne finde Firstname Peter Surname Hansen Nickname Mekanikeren og kun de resultater hvor alle 3 bider er med. jeg kan ikke helt se det for mig med dit forslag
11. september 2015 - 17:19
#3
Nu er jeg lidt forvirret over hvad du soeger. Der er to helt uafhaengige problemer: 1) hvordan query skal strikkes sammen med AND eller OR for at faa det resultat du oensker 2) hvordan du konstruerer en PDO prepared statement med et variabelt antal betingelser Mit svar var til problem #2.
11. september 2015 - 17:50
#4
som beskrevet i mit spørgsmål har jeg begge problemer på en gang og det kan jeg ikke finde ud af
12. september 2015 - 03:57
#5
I dit spoergsmaal skrev du at du behoevede hjaelp til at "lave dette om til en PDO". Jeg formodede at det betoed at den SQL der var i eksemplet faktisk virkede som du oenskede.
12. september 2015 - 07:34
#6
ja sql'en virker fint nok. jeg kan bare ikke se hvor jeg preparer og binder et array så det kommer til at virke på samme måde
13. september 2015 - 00:00
#7
Og det var det som jeg svarede paa i #1
13. september 2015 - 13:52
#8
jeg kan ikke finde ud at at omsætte det du skriver til praksis. jeg forstår det ikke. Kan du komme med et eksempel?
13. september 2015 - 14:44
#9
Det maa blive noget a la (utestet): $query = "SELECT persons.id FROM persons WHERE 1 AND deleted = 0"; $pvalues = array(); $pnr = 0; foreach ($search as $value) { $pnr++; $valueplace = 'p' . $pnr; $query .= " AND (firstname LIKE '%".$valueplace."%'"; $query .= " or surname LIKE '%".$valueplace."%'"; $query .= " or nickname LIKE '%".$valueplace."%'"; if (is_int($value*1)) $query .= " or persons.id = '$valueplace'"; $query .= ")"; $pvalues[$valueplace] = $value; } query .= " GROUP BY persons.id ORDER BY firstname asc LIMIT 0,10"; $stmt = $con->prepare($query); $stmt->execute($pvalues);
13. september 2015 - 14:45
#10
ups $valueplace = 'p' . $pnr; skal naturligvis vaere $valueplace = ':p' . $pnr;
13. september 2015 - 15:53
#11
'' skal ogsaa vaek omkring parametre. Og % skal ind i parametre.
13. september 2015 - 19:02
#12
Kombineret: $query = "SELECT persons.id FROM persons WHERE 1 AND deleted = 0"; $pvalues = array(); $pnr = 0; foreach ($search as $value) { $pnr++; $valueplace = ':p' . $pnr; $wcvalueplace = ':wcp' . $pnr; $query .= " AND (firstname LIKE $wcvalueplace"; $query .= " or surname LIKE $wcvalueplace"; $query .= " or nickname LIKE $wcvalueplace"; if (is_int($value*1)) $query .= " or persons.id = $valueplace"; $query .= ")"; $pvalues[$valueplace] = $value; $pvalues[$wcvalueplace] = '%' . $value . '%'; } query .= " GROUP BY persons.id ORDER BY firstname asc LIMIT 0,10"; $stmt = $con->prepare($query); $stmt->execute($pvalues);
23. oktober 2015 - 10:42
#13
Super det er en skide god løsning smid et svar
23. oktober 2015 - 14:19
#14
svar
Vi tilbyder markedets bedste kurser inden for webudvikling