tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

isset hlasí neexistující proměnnou

před 9 lety

Chbox
Člen | 125
return dibi::fetchAll
    ('  SELECT [inzeraty.id], [profese], [obory.nazev] AS [obor], [kraje.nazev] AS [kraj], [obce.obec] AS [obec], [odmena]
        FROM [inzeraty]
        %if', isset($user), 'WHERE [user]=%s', $user
    );

Vyskočí laděnka → Notice: Undefined variable: user
Nevíte, co je špatně?

Editoval Chbox (10. 2. 2011 11:21)

před 9 lety

Milo
Nette Core | 1119
return dibi::fetchAll('
    SELECT
        [inzeraty.id],
        [profese],
        [obory.nazev] AS [obor],
        [kraje.nazev] AS [kraj],
        [obce.obec] AS [obec],
        [odmena]
    FROM
        [inzeraty]
    %if', isset($user), 'WHERE [user] = %s', isset($user) ? $user : NULL, '%end
');

před 9 lety

Chbox
Člen | 125

huh, díky, netušil jsem, že se to musí ošetřit i na dosazované proměnné. Aspoň ze vzorového příkladu mi to nedošlo nebo je to nějaká změna od ver. 1.2?

viz. vzor. příklad:

$user = ???
dibi::query('SELECT *FROM [table]%if', isset($user), 'WHERE [user]=%s', $user);

Editoval Chbox (10. 2. 2011 14:18)

před 9 lety

Milo
Nette Core | 1119

Jde o to, že proměnou $user nemáš definovanou, proto vyskočí ta notice jako kdekoliv jinde v kódu PHP. Ve Quick-startu definice je. isset() je tam použito pro testovani na NULL a ne pro testovani existence promenne.

function getData( $user = NULL )
{
    // staci testovat 1x, $user je vzdy definovano
    return dibi::fetchAll('SELECT ...... %if', isset($user), 'WHERE user = %s', $user );
}

// $user se musi testovat 2x, neni jiste zda je promenna nadefinovana
dibi::fetchAll('SELECT ...... %if', isset($user), 'WHERE user = %s', isset($user) ? $user : NULL );

před 9 lety

Chbox
Člen | 125

díky za vysvětlení, měl jsem za to, že to řeší i existenci.