Avatar billede compac Seniormester
04. februar 2021 - 15:39 Der er 5 kommentarer og
2 løsninger

Sortering i et prepare-udtryk

Jeg skal foretage en sortering i alfabetisk orden efter første . begyndelsesbogstav, og andet kriterie:  dato.
Jeg har prøvet en masse men denne kommer nok nærmest:
$stmt = $link->prepare("SELECT * FROM vandreture where titel >= '$sort' ORDER BY $titel, $dato ASC limit 50");
    $stmt ->bind_param("si",$titel,$dato);
    $stmt->execute();
    $tur = $stmt->get_result();
-den tager posten med hvis blot begyndelsesbogstavet er med i ordet uanset det står.
Avatar billede arne_v Ekspert
04. februar 2021 - 16:10 #1
$stmt = $link->prepare("SELECT * FROM vandreture where titel >= '$sort' ORDER BY $titel, $dato ASC limit 50");

$stmt ->bind_param("si",$titel,$dato);

Er der parameters eller ikke??
Avatar billede compac Seniormester
04. februar 2021 - 22:23 #2
Jeg vil vise dig sætningen  med "gammeldags" opskrift:

  $tur = mysqli_query($link,"SELECT * FROM vandreture where titel >= '$sort' ORDER BY titel, dato ASC limit 50");

Vil du vise mig hvordan jeg får den omskrevet?
Avatar billede arne_v Ekspert
05. februar 2021 - 01:37 #3
Jeg forstaar stadig ikke spoergsmaalet.

Men hvis dit spoergsmaal er hvordan du saetter sorterings felt som parameter, saa er svaret at det kan du ikke.

Parameters er kun til vaerdier ikke til andet - ikke til felt navne eller tabel navne.

Saa an angivelse af sorterings raekkefoelge skal enten ske med gammeldags SQL streng konkatanering eller noget snasket work around.
Avatar billede compac Seniormester
05. februar 2021 - 17:29 #4
Jeg har studeret en af dine vejledninger og fundet frem til denne:
https://www.vajhoej.dk/arne/articles/prepparam.html#prob
Det gav denne løsning:
$sel = $link->prepare('SELECT * FROM vandreture WHERE titel >= ? ORDER BY titel ASC LIMIT 50');
$sel->bind_param('s', $cut);
$cut =  $sort;
$sel->execute();
$tur = $sel->get_result();
-tak for hjælpen
Avatar billede arne_v Ekspert
05. februar 2021 - 17:42 #5
I det tilfaelde er parameter en vaerdi =. alt OK.

Det er:

ORDER BY ?

som ikke ville virke.
Avatar billede compac Seniormester
05. februar 2021 - 20:28 #6
Ja, ORDER BY ? virker ikke. Men den havde jeg heller ikke forsøgt. Hvis jeg forsøger, hvordan skal det så bygges op?
Avatar billede arne_v Ekspert
05. februar 2021 - 20:41 #7
Som jeg siger.

Bedst - the oldfashioned way:

check_for_bad_input($feltnavn);
$sql = "SELECT ... ORDER BY $feltnavn"

hack:

lave en ORDER BY paa en CASE paa en vaerdi.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester