Habari\DatabaseConnection::update PHP Метод

update() публичный Метод

function update Updates any record that matches the specific criteria A new row is inserted if no existing record matches the criteria
public update ( string $table, array $fieldvalues, array $keyfields ) : boolean
$table string Table to update
$fieldvalues array Associative array of field values to set
$keyfields array Associative array of field values to match
Результат boolean True on success, false if not DB::update( 'mytable', array( 'fieldname' => 'newvalue' ), array( 'fieldname' => 'value' ) );
    public function update($table, $fieldvalues, $keyfields)
    {
        ksort($fieldvalues);
        ksort($keyfields);
        $keyfieldvalues = array();
        foreach ($keyfields as $keyfield => $keyvalue) {
            if (is_numeric($keyfield)) {
                // if the key is numeric, assume we were handed a simple list of fields that are keys and fetch its value from $fieldvalues
                $keyfieldvalues[$keyvalue] = $fieldvalues[$keyvalue];
            } else {
                // otherwise we were handed a key => value pair, use it as-is
                $keyfieldvalues[$keyfield] = $keyvalue;
            }
        }
        if ($this->exists($table, $keyfieldvalues)) {
            $qry = "UPDATE {$table} SET";
            $values = array();
            $comma = '';
            foreach ($fieldvalues as $fieldname => $fieldvalue) {
                $qry .= $comma . " {$fieldname} = ?";
                $values[] = $fieldvalue;
                $comma = ' ,';
            }
            $qry .= ' WHERE 1=1 ';
            foreach ($keyfieldvalues as $keyfield => $keyvalue) {
                $qry .= "AND {$keyfield} = ? ";
                $values[] = $keyvalue;
            }
            return $this->query($qry, $values);
        } else {
            // We want the keyfieldvalues to be included in
            // the insert, with fieldvalues taking precedence.
            $fieldvalues = $fieldvalues + $keyfieldvalues;
            return $this->insert($table, $fieldvalues);
        }
    }