Avatar billede showsource Seniormester
17. oktober 2016 - 07:25 Der er 2 kommentarer og
1 løsning

bind_param() med x-antal parametre

Hej
Har en formular hvor man kan vælge div. for at få vist et samlet resultat.
Hvordan grejer jeg lige den, når der skal bruges prepared statements?
Det jeg ikke kan finde ud af er hvordan jeg får lavet en bind_param() med x-antal, og efterflg. får defineret x-antal vars.
Avatar billede arne_v Ekspert
17. oktober 2016 - 15:13 #1
mysqli preprade statement og variabelt antal parametre er lidt tricky.

Eksempel:


<?php
function load($con, $sqlstr, $typs, $vals) {
    if($stmt = $con->prepare($sqlstr)) {
        call_user_func_array(array($stmt, 'bind_param'), array_merge(array($typs), array_map(function(&$v) { return $v; }, $vals)));
        $stmt->execute();
        if($res = $stmt->get_result()) {
            $retval = $res->fetch_all(MYSQLI_ASSOC);
            $res->free();
            $stmt->close();
        } else {
            die($con->error);
        }
    } else {
        die($con->error);
    }
    return $retval;
}

function test($con, $sqlstr, $typs, $vals) {
    $arr = load($con, $sqlstr, $typs, $vals);
    foreach($arr as $row) {
        echo $row['f1'] . ' ' . $row['f2'] . "\r\n";
    }
}

$con = new mysqli('localhost', 'root', '', 'Test');
if(mysqli_connect_errno()) die(mysqli_connect_error());
test($con, 'SELECT f1,f2 FROM t1 WHERE f1=?', 'i', array(2));
test($con, 'SELECT f1,f2 FROM t1 WHERE f1=? OR f1=?', 'ii', array(1,3));
$con->close();
?>
Avatar billede showsource Seniormester
19. oktober 2016 - 10:21 #2
Ja, det er noget "skidt" at det skal være så kringlet.
Har
kunde
bruger
startdato
slutdato
Lige i dette tilfælde fik jeg "barberet" ned ved at stole på checkdate() samt lave et enkelt kald for id og brugernavn hvis det er valgt
Avatar billede arne_v Ekspert
19. oktober 2016 - 14:49 #3
Det er kringlet men det kan lade sig goere.

Det er langt nemmere med PDO!
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