sql >> Databáze >  >> RDS >> Mysql

MySQLi připravilo prohlášení s dynamickým aktualizačním dotazem

Trik je vytvořit pole, které obsahuje parametry, které chcete svázat, a poté pomocí call_user_func_array , můžete toto pole předat bind_param .

Viz http://www.php.net/ manual/cs/function.call-user-func-array.php podrobnosti o call_user_func_array .

Váš kód může být něco jako:

    $para_type="";
    /* $para is the array that later passed into bind_param */
    $para=array($para_type);
    $query = 'UPDATE tickets SET ';

    IF(count($data) != 0) {
        /* Looping all values */

        foreach($data as $k=>$d) {
            $query .= '`'.$d['field'].'` = ? ,';

            $para_type .=$d['type'];

            $para[] = &$data[$k]['value'];
        }

        /* removing last comma */
        $query[(strlen($query)-2)] = '';

        /* adding where */
        $query .= ' WHERE `ticket_id` = ?';
        $para_type .= 'i';
        $para[]=&$ticket_id;

        call_user_func_array(array($stmt, 'bind_param'), $para);

        return true;
    }

Všimněte si & před všemi parametry je vyžadován parametrem bind_param .

Dalším způsobem, který považuji za lepší, je použití PDO. Přebírá pojmenovaný parametr a může provádět inkrementální vazbu.




  1. Export dat MySQL do Excelu v PHP

  2. Mysql drop uživatele s granty pro více hostitelů

  3. 5 jednoduchých kroků, jak začít s MariaDB a Tableau

  4. Ideální typ pole pro binární data s pevnou šířkou