Új hozzászólás Aktív témák

  • Taci

    addikt

    bind_param, ezzel kapcsolatban kérdeznék.

    Adott egy olyan lekérdezés, amiben van egy változó tartalmú rész, pl.:
    WHERE id NOT IN (0), máskor NOT IN (0,1,2,3), vagy NOT IN (0,1,2,3,4,5,6,7,8,9) stb.

    Tehát a zárójelen belül lehet akár 1, akár 11 érték is, változó.

    Ha simán csak stringként adom át, akkor nem működik. Pl.:

    $id_list = "0,1,2,3,4,5,6,7,8,9";
    $stmt = $mysqli->prepare("... WHERE id NOT IN (?)");
    $stmt->bind_param('s', $id_list);

    (Nincs előttem a kódom most, de kb. így lehet. Plusz azok az id-k belső kódból jönnek, így lehet, le sem kellene védenem őket, de talán jobb lenne biztonságban tudni.)

    Itt látok pont most talán egy ide illő megoldást: ReflectionClass (sose láttam még).
    https://www.php.net/manual/en/mysqli-stmt.bind-param.php

    Coming to the problem calling mysqli::bind_param() with a dynamic number of arguments via call_user_func_array() with PHP Version 5.3+, there's another workaround besides using an extra function to build the references for the array-elements.
    You can use Reflection to call mysqli::bind_param(). When using PHP 5.3+ this saves you about 20-40% Speed compared to passing the array to your own reference-builder-function.
    Example:
    <?php
    $db     = new mysqli("localhost","root","","tests");
    $res    = $db->prepare("INSERT INTO test SET foo=?,bar=?");
    $refArr = array("si","hello",42);
    $ref    = new ReflectionClass('mysqli_stmt');
    $method = $ref->getMethod("bind_param");
    $method->invokeArgs($res,$refArr);
    $res->execute(); 
    ?>

    Otthon utána olvasok majd (munkanap végén).

    Van ezzel tapasztalatotok? Hogyan lehetne ezt megoldani?

Új hozzászólás Aktív témák

Hirdetés