Portál AbcLinuxu, 25. dubna 2024 20:10


Dotaz: MySQL vlastnosti sloupce

9.5.2016 12:47 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
MySQL vlastnosti sloupce
Přečteno: 1193×
Odpovědět | Admin
Zdravíčko,

Mám takový podivný problém .. pro editaci záznamu z tabulky používám - mimo jiné - i údaje zjištěné pomocí
while ( $fieldinfo = $result->fetch_field(){....}

konkrétně mně zajímá hodnota FLAG NOT_NULL.

Pokud přidávám nový řádek, načítám "prázdný záznam" pomocí dotazu

$to_select => to jsou sloupce určené k editaci, $t=> jméno tabulky
$query = 'SELECT '.$to_select.' FROM (SELECT 1) AS ignore_me LEFT JOIN '.$t.' ON 1 LIMIT 1';
Tento zápis je netriviální proto, že jsem nenašel rozumný způsob, (je lepší ?) jak ošetřit vkládání prvního řádku do prázdné tabulky ... takto mám k dispozici sloupce tabulky vždy, mají správné atributy, které mohu při editaci použít k nastavení INPUT polí ... ale hodnota flagu NOT_NULL se ztratí ... je vždy FALSE

mohu to vyřešit tak, že nejprve testnu, zda má tabulka nějaké řádky "SELECT COUNT(ID) .... " , a pokud ano, pak načíst první řádek tabulky, fetchnout vlastnosti, vymazat hodnoty a předhodit k editaci. Nicméně problém prvního řádku zůstává.

Editace již existujícího záznamu, který vytahuju normálním SELECTem, bez těch ošklivin okolo NOT_NULL zachová.

Takže, co nechápu, proč nyní používaný způsob nezachová atribut NOT_NULL a zda to nejde ošetřit elegantněji než mnou naznačené řešení.

Děkuji předem za nakopnutí.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (Milan Uhrák (tazatel))
9.5.2016 14:18 Filip Jirsák
Rozbalit Rozbalit vše Re: MySQL vlastnosti sloupce
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkusil bych použít mysqli_stmt_result_metadata. A nebo načítat metadata přímo ze systémových tabulek. U toho vašeho LEFT JOINu je logické, že se NOT NULL „ztratí“ – hodnoty vrácené z té pravé tabulky přece mohou být NULL.
Řešení 1× (Milan Uhrák (tazatel))
Josef Kufner avatar 9.5.2016 14:20 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: MySQL vlastnosti sloupce
Odpovědět | | Sbalit | Link | Blokovat | Admin
Šmankote, co to děláš za šílenost?

Jsou dvě možnosti, jak zjistit sloupce tabulky.
  1. Načíst si informace pomocí SHOW COLUMNS a podobných dotazů (nebo z information_schema, ale na to se vybodni).
  2. Udělat SELECT * FROM tabulka LIMIT 0 a pomocí PDOStatement::getColumnMeta() si vytáhnout metadata o každém sloupci (počet sloupců získáš pomocí PDOStatement::columnCount()).
To první ti dá detailnější informace, to druhé je výrazně rychlejší a při troše štěstí to stačí (NOT NULL tam je).
Hello world ! Segmentation fault (core dumped)
9.5.2016 16:55 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
Rozbalit Rozbalit vše Re: MySQL vlastnosti sloupce
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak oběma děkuji za zajímavé náměty .. no jinak to prostě neumím, tak jsem to napsal tak, jak jsem vygooglil ...

Zkusím a zhodnotím .. jo a PDO nepoužívám, jen Mysqli .. ten LIMIT 0 vypadá slibně
Josef Kufner avatar 9.5.2016 17:07 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: MySQL vlastnosti sloupce
PDO používej, je to hezké, moderní a slušně navržené API, které funguje na mnoha databázích a ušetří ti to spousty starostí.
Hello world ! Segmentation fault (core dumped)
9.5.2016 17:51 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: MySQL vlastnosti sloupce
Také se přimlouvám za PDO. Má spoustu příjemných vychytávek, například oproti MySQLi má lépe vyřešeny Prepared Statements - metoda bindParam(), která mě tak prudila, se stala prakticky zbytečnou.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
9.5.2016 20:02 Milan Uhrák | skóre: 31 | blog: milan_at_ABC
Rozbalit Rozbalit vše Re: MySQL vlastnosti sloupce
Odpovědět | | Sbalit | Link | Blokovat | Admin
No .. mám nad Mysqli takovou vlastní nadstavbu, a jsem s tím spokojen, alespoň co se týče mého "stylu" programování.

"LIMIT 0" funguje bezvadně, jen s drobnou úpravou okolního kódu, paráda, oběma díky

Mně předtím prostý SELECT .. LIMIT 1 vlastně nevracel nic, a nevěděl jsem, jak z toho "nic" uvařit ty inputy .. pak jsem někde našel to použité řešení .. už to bylo lepší, ale pořád to zlobilo. NOT_NULL používám k "přibarvení" pozadí vstupu, a kontrole před odesláním, jestli není prázdné ... a u nových vět to pochopitelně nefungovalo. Tohle je úplně profi ..

M.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.