PHP - mysqli
2011-08-27T11:41:54+02:00
2011-08-27T22:35:44+02:00
2022-07-24T11:46:19+02:00
  • Kicsit fapados

    function my_mysql_query() { $numargs = func_num_args(); $types = ''; for ($i = 0; $i < $numargs; $i++) { $arg = func_get_arg($i); if (is_numeric($arg)) { $types.="i"; }else{ $types.="s"; } $args[($i+1)] = $arg; unset($arg); } $args[0] = $types; return call_user_func_array('mysqli_stmt_bind_param',$args); }

    Egy hasonlót használok a 'sprintf' kijátszásához is.
    Mutasd a teljes hozzászólást!
  • [törölve: elfelejtettem frissíteni, látom, közben már bepostoltad.]
    Mutasd a teljes hozzászólást!
  • Akkor szerencsére tévedtem, és lehet hogy meglehet írni ezt a függvényt. (Majd egyszer újra nekifutok.)

    De mondjuk így is lenne egy kis workaround amit alkalmazni kell, mert a függvény nem várhatja el azt, hogy a $parameters array-ben kizárólag referencia szerint tartalmazott változók legyenek. Márcsak azért sem, mert adott esetben literált szeretnénk beletenni a $parameters tömbbe.

    Tehát valami ilyesmi lenne a kódban:
    foreach ( $parameters as &$parameter ) { $parametersWrapper[] = &$parameter; } call_user_func_array( 'mysqli_stmt_bind_param', array_merge( array($statement, 'iissssii'), $parametersWrapper ) );
    Mutasd a teljes hozzászólást!
  • array(&$id, &$id, &$orderBy, &$orderBy, &$orderBy, &$orderBy, &$from, &$pageSize)
    Mutasd a teljes hozzászólást!
  • Az még nem jelentene gondot, hogy a bind_param metódus első paraméterét összerakjam.
    Gondolom erre utaltál, ugye?
    A is_numeric függvény segítségével ad-hoc meg tudom állapítani a paraméterek típusát...

    A problémám azzal volt, hogy a bind_param metódusnak változó mennyiségű paramétert kellene átadni, mivel a paramétereket nem fogadja el array formátumban.

    Itt egy példa amely szemlélteti a problémát:
    [PHP] How to use mysqli - Pastebin.com
    Hogyha a 21. sort lecserélem a 23-29. sorokra, akkor ezt a hibaüzenetet kapom:
    Parameter 3 to mysqli_stmt_bind_param() expected to be a reference, value given


    Márpedig én más megközelítést nem látok...
    Mutasd a teljes hozzászólást!
  • Szerintem az egyetlen akadály itt a típusok hiánya a PHP-ban. De ha egy asszociatív tömbben a típusokat is letárolod (vagy automatikus típusfelismerést csinálsz), akkor minden további nélkül megoldható.
    Mutasd a teljes hozzászólást!
  • Egyetértek veled.
    Szerintem nemcsak a mysql lib de a mysqli is kuka.

    Egyikhez sem lehet implementálni egy ilyen wrapper metódust:
    array my_mysql_query(string $sql, array $parameters)

    PDO-ban sincs ez így meg konkrétan, de ott leglább nem tartalmaz a lib olyan koncepcionális hibát, ami egy ilyen metódus gyors összedobását megakadályozná.
    Mutasd a teljes hozzászólást!
  • Az már csak az én halk sirámom, hogy az ingyenes tárhely szolgáltatók egy része miért nem képes a MySQL eléréshez mysqli-t v. a kedvenc PDO-mat is nyújtani.


    Ezzel nagy mértékben meg is válaszoltad a kérdésedet... Amíg az ingyenes oldalak többsége mysql kiterjesztést használja, illetve amíg a php oktatóanyagok és netes tutorialok is a mysql kiterjesztésre koncentrálnak főleg, addig a kezdők nem is fogják a mysqli-t használni.
    Mutasd a teljes hozzászólást!
  • Akkor érthetőbben: az itt kérdezők 99%-a full kezdő.
    Ha csak most kezdi, miért egy eleve elavult, dokumentáltan kihalásra ítélt technológiát tanulnak?

    Az már csak az én halk sirámom, hogy az ingyenes tárhely szolgáltatók egy része miért nem képes a MySQL eléréshez mysqli-t v. a kedvenc PDO-mat is nyújtani.
    Mutasd a teljes hozzászólást!
  • Van rá valami ésszerű magyarázat, hogy miért?

    Mert... elterjedt?
    Mutasd a teljes hozzászólást!
  • Elég régóta látom, hogy ha valaki itt PHP-mysql témában kérdez valamit, következetesen a mysql extensiont használja mysqli vagy egyéb (pl. PDO) megoldások helyett.
    Van rá valami ésszerű magyarázat, hogy miért?
    Ott a doksiban, hogy elavult, rövidesen megszüntetik.
    Biztonsági szempontból is problémásabbnak tűnik, mint pl. a mysqli, ahol már lehet ú.n. prepared statement-ekkel dolgozni, amivel pl. elkerülhető az escape-elés (lásd mysqli_bind* és társai)
    De akkor miért?
    Mutasd a teljes hozzászólást!
abcd