Oznámení
Název sloupce obsahuje znak procenta (%)
před 5 lety
- Podvečerníček
- Člen | 15
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 5 lety
- Milo
- Nette Core | 1119
$dibi->query('SELECT * FROM %n', $table);
před 5 lety
- Podvečerníček
- Člen | 15
Snaha se uznává, ale tohle evidentně není správné řešení.
před 5 lety
- Milo
- Nette Core | 1119
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 5 lety
- Podvečerníček
- Člen | 15
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 4 lety
- Milo
- Nette Core | 1119
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 4 lety
- Podvečerníček
- Člen | 15
Zafungovalo. Díky!