Jak napsat select (vrací Resource id #5)?
Testujeme 6 stejných bankovních ústavů v každém kraji. Do databáze se uloží data z formuláře, co už testeři navštívili. Chci udělat přehled, co už je hotové. Třeba tabulka pro středočeský kraj. Chci tam mít šest řádků s vypsanými bankami a prázdné místo pro město a ulici. Když to tester navštíví, doplní se město a ulice. Např tedy
<td>Česká spořitelna a. s.</td>
<?php
$sc_cs_mesto = mysql_query(
"Select mesto FROM bb_2013 WHERE kraj='Středočeský kraj' LIKE banka='Česká spořitelna a. s.'"
);
?>
<td><?php echo $sc_cs_mesto; ?>
Jenže tohle mi vrací Resource id #5
Co dělám blbě?
když tam dám
while( $row = mysql_fetch_array($sc_cs_mesto))
a v buňce <?php echo $row ['mesto']; ?>, zmizne sice Resource id, ale nic se nezobrazí.
resource id #5 atd. ti vypisuje pretoze nepouzivas mysql_fetch_array alebo mysql_fetch_assoc.
s najvacsou pravdepodobnostou mas problem s diakritikou.
cize daj sem co ti vypise v sqlku tento dotaz:
show variables where variable_name like '%coll%';
malo by to vyplut nieco podobne:
nojo, kódování
jdu studovat proč
no to mas trochu rozhasene. najidealnejsie je pouzivat utf8_czech_ci vsade. nastavis to v configu mysql servera.
len potom treba dat pozor, ze aj ked zmenis collation servera, treba zmenit collation aj na tabulkach.
ked si das: "show create table bb_2013" tak ti to vypluje kod tabulky a v nom najdes aj aku collation dana tabulka pouziva.
vid priklad:
CREATE TABLE `proces` (
`ProcesID` int(11) NOT NULL AUTO_INCREMENT,
`ProcesName` varchar(50) COLLATE utf8_slovak_ci NOT NULL,
`Catg` varchar(50) COLLATE utf8_slovak_ci NOT NULL,
`Img` varchar(100) COLLATE utf8_slovak_ci DEFAULT NULL,
`shortdesc` varchar(200) COLLATE utf8_slovak_ci DEFAULT NULL,
`longdesc` varchar(500) COLLATE utf8_slovak_ci DEFAULT NULL,
`detail` varchar(2000) COLLATE utf8_slovak_ci DEFAULT NULL,
PRIMARY KEY (`ProcesID`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COLLATE=utf8_slovak_ci
a len tak btw, collation nie je kodovanie. collation sluzi len na definiciu ako sa vyhodnocuju retazce. niektore collation napriklad dovoluju case sensitive vyhladavanie, alebo napriklad to, ze pri vyhladavani pismena "s" sa vyhladaju aj pismena "š". atd. cize nejde o kodovanie, to je characterset.
export tabulky a COLLATE má 1250
To jsem z toho jelen...
vid moj prispevok ohladne vysvetlenia collation o jedno vyssie.
cp1250_czech_cs je nejaky windows like ceske collation pricom "cs" znamena case sensitive. "ci" je case insensitive - co urcite odporucam viac.
Mě to nikdy nezlobilo, mám tak snad 50 jiných.
skus este upravit ten select:
Select mesto FROM bb_2013 WHERE trim(kraj)='Středočeský kraj' and banka LIKE '%Česká spořitelna a. s.%'
Nepomohlo
tak skus tieto premenne nastavit vsetky na cp1250_czech_cs a potom ci pojde tvoj povodny select. podla mna je cely problem v tom, ze je to rozhasene na rozne collation a nie je to ujednotene.
Variable_name Value
collation_connection utf8_unicode_ci
collation_database latin2_czech_cs
collation_server utf8_czech_ci
Dík za pomoc, nebudu se s tím nervovat, udělal jsem to jako jsem začal tu Prahu a nad tím vším udělám tabulku s kraji a počtem vyplněných, aby se nemuselo rolovat.
http://kochlear.cz/banka-bez-barier/2013/vypisy/vy plnene.php
Aby sis do budoucna ušetřil nervy, poopravil bych návrh databáze.
Zaveď si číselník krajů i bank.
Nejenomže se zbavíš výše řešeného problému - kód 001 v databázi najdeš třeba v čínštině.
Ale banka se třeba může přejmenovat. Neopravoval bys všechny záznamy, ale jenom políčko název v číselníku.