tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

Chyba v příkazu: Update set Col = Col + 1

před 8 lety

smi
Člen | 76

Ahojka,
používám Dibi 1.5rc a při příkazu typu:

Update set Col = Col + 1

mi to hlásí:

Incorrect integer value: ‚Col‘ for column ‚Col‘ at row 1

To znamená, že to dibi neumí nebo to dělám blbě ?

před 8 lety

Milo
Nette Core | 1119

Jak vypadá celý SQL dotaz a na jaké DB? Dibi to „umí“, je to nástroj na poskládání dotazu. Spíš dáváš apostrofy tam kde nemají být.

dibi::query('UPDATE [tabulka] SET [Col] = [Col] + 1');

před 8 lety

smi
Člen | 76

No kód vypadá takhle.

Dibi je poslední tedy 1.5 rc

        // Argumenty
    $plus = 30*24*3600;
    $prodlouzil = "Já";
    $Klic = 1;
    $this->table = "Uzivatele";

        $date = "Platnost + $plus"; nebo $date = "`Platnost`";

        $args = array(
            'Platnost' => $date,

            'Prodlouzil' => $prodlouzil,
            );

// Sql query - Incorrect integer value: '`Platnost`' for column 'Platnost' at row 1 !!!
        $que = dibi::update($this->table, $args)
                // Neprodluzovat superuzivatele !
                ->where('Klic = %i AND Platnost != -1', $Klic)
                // Rana jistota
                ->limit(1);
// Sql query - Incorrect integer value: '`Platnost`' for column 'Platnost' at row 1 !!!

Editoval smi (25. 5. 2011 19:47)

před 8 lety

Milo
Nette Core | 1119

Musíš specifikovat, jaký datový typ ukládáš do sloupce Platnost. Když to neuděláš, dibi typ detekuje a ve tvém případě zvolí typ string, což je z bezpečnostního hlediska OK.

// Argumenty
$plus = 30 * 24 * 3600;
$prodlouzil = 'Já';
$Klic = 1;
$this->table = 'Uzivatele';

$args = array();
$args['Prodlouzil%s'] = $prodlouzil;    // Hodnota je string

if (podminka)
{
    // Hodnota je pole a to chci expandovat do SQL kodu
    $args['Platnost%ex'] = array('[Platnost] + %i', $plus);
}
//else  // Else muzes vynechat, stejne se sloupec neupdate
//{
//  $args['Platnost%n'] = 'Platnost';   // Hodnota je nazev sloupce
//}

$que = dibi::update($this->table, $args)
    ->where('[Klic] = %i AND [Platnost] != -1', $Klic)
    ->limit(1);

Editoval Milo (25. 5. 2011 23:06)

před 8 lety

smi
Člen | 76

Díky za radu