tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

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

Název sloupce obsahuje znak procenta (%)

před 2 lety

Podvečerníček
Člen | 15
+
0
-

Zdravím,
Klient má v databázi MySQL tabulky se sloupci, jenž mají ve svém názvu znak %.
Jak mám při manipulaci s těmito tabulkami donutit dibi, aby % neinterpretovalo jako modifikátor?
(Prosím pouze o rady a řešení k mému problému, nezajímá mě debata o konvenci pojmenovávání sloupců.)
Díky!

před 2 lety

Milo
Moderator | 1035
+
0
-
$dibi->query('SELECT * FROM %n', $table);

před 2 lety

Podvečerníček
Člen | 15
+
0
-

Snaha se uznává, ale tohle evidentně není správné řešení.

před 2 lety

Milo
Moderator | 1035
+
0
-

Promiň, že jsem neodpověděl na první dobrou. Mohl bys problém, nebo situaci více rozepsat? Dibi se dá použít na sto způsobů.

před 2 lety

Podvečerníček
Člen | 15
+
0
-

V pohodě. Pokusím se blíže vysvětlit.
Klient má sloupeček nazvaný time100%done (vím, že je to blbě a zdroj problémů, ale tak to je a nic s tím nezmůžu).
Kód:

<?php
$result = dibi::query('INSERT INTO tabulka SET', array(
        'name' => 'blabla',
        'time100%done' => '2015-02-02'
    ));
?>

hodí „Fatal error: Uncaught exception ‚DibiException‘ with message ‚SQL translate error‘“ a „DibiException: SQL translate error in …“.
dibi::$sql se přeloží na „INSERT INTO user SET (name, time100) VALUES (‚blabla‘, **Unknown or invalid modifier %done%d**)“
To samé pro

<?php
array(
        'name%s' => 'blabla',
        'time100%done%d' => '2015-02-02'
    )
?>

před 2 lety

Milo
Moderator | 1035
+
0
-

S klíčem pole to půjde těžko. Natvrdo se teď rozděluje podle prvního procenta. Šel by vymyslet jakýsi ruční translator, nebo str_replace(), ale nejjednodušší bude psát to ručně:

dibi::query('
    INSERT INTO tabulka (
        [name],
        [time100%done]
    ) VALUES (
        %s', $data['name'], ',
        %d', $data['time100%done'], '
    )');

před 2 lety

Podvečerníček
Člen | 15
+
0
-

Zafungovalo. Díky!