Autor | Zpráva | ||
---|---|---|---|
TFSi Profil |
#1 · Zasláno: 28. 6. 2008, 19:08:37
Zdravím,
vyskytl se mi takový problém - mám v databázi takovouto tabulku: REATE TABLE `teams` ( `id` tinyint(3) unsigned NOT NULL auto_increment, `team` varchar(30) NOT NULL, `year` tinyint(2) unsigned NOT NULL default '8', `email` varchar(100) NOT NULL, `heslo` varchar(32) NOT NULL, `date` int(10) unsigned NOT NULL default '0', `info` text, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2 a z ní v PHP vybírám tímto dotazem: $sql = 'SELECT * FROM `teams` WHERE `email`="'.$email.'" LIMIT 1'; a i když jsem si 100% jist, že všechny emaily, které mám v proměnné $email mám i v databázi, tak mi to v některých případech napíše, že dotaz nevátil žádný výsledek ->tedy že uvedený email neexistuje?! PS: emaily před vložením do DB i před vložením do dotazu proháním přes funkci strtolower(); |
||
Joker Profil |
#2 · Zasláno: 28. 6. 2008, 19:19:55
TFSi
že všechny emaily, které mám v proměnné $email mám i v databázi Jak všechny? Tam se porovnává jen jeden. Jestli do $email dáváte něco jako "prvni@neco.cz,druhy@neco.cz,tretí@neco.cz", tak není divu, že to nic nenajde. |
||
TFSi Profil |
#3 · Zasláno: 28. 6. 2008, 19:38:35
Joker
Blbě jsem se vyjádřil. omlouvám se. Já to myslel tak, že když se provede například SELECT * FROM `teams` WHERE `email`="email1@example.com" LIMIT 1 tak nevybere nic, když se provede SELECT * FROM `teams` WHERE `email`="email2@example.com" LIMIT 1 tak se vybere, když dám SELECT * FROM `teams` WHERE `email`="email3@example.com" LIMIT 1 tak se taky vybere, když dám SELECT * FROM `teams` WHERE `email`="email4@example.com" LIMIT 1 tak se zase nevybere nic. a přitom v databázi všechny 4 emaily mám. |
||
joe Profil |
#4 · Zasláno: 28. 6. 2008, 19:51:07
Zkusil bych změnit uvozovky na apostrofy
SELECT * FROM teams WHERE email='email4@example.com' LIMIT 1 |
||
TFSi Profil |
#5 · Zasláno: 28. 6. 2008, 20:31:35
joe
Bez účinku. Stále to některé emaily nenajde :( Mám takovou teorii: nemohlo by to být tím, že by náhodou [CTRL]+[ALT]+[V] vkládalo nějaký jiný znak vypadající jako zavináč než [ALT]+[6]+[4]??? Pouze teorie. já už totiž Vážně netuším čím by to mohlo být... :( |
||
Joker Profil |
#6 · Zasláno: 28. 6. 2008, 21:43:49
TFSi
Pátral bych tímhle směrem: Nemají ty adresy, které se nevyberou, nějakou společnou zvláštní vlastnost? Není třeba problém s nějakým speciálním znakem? Dál mě napadá, že jestli se adresy vkládají přes copy-paste, nemohou tam být vložené ještě nějaké další znaky? Například mezery (i když operátoru = by mezery vadit neměly), tabulátor, konec řádku... |
||
TFSi Profil |
#7 · Zasláno: 29. 6. 2008, 01:43:24
Takže jsem po tom ještě pátral a tady jsou závěry mého celodenního snažení:
1) na lokální databázi vše funguje tak jak má, adresy se vyberou bez problému (technická podpora hostingu se mi vysmála že je to kravina, že u nich je vše v pořádku) 2) v databázi je teď 114 emailů, z toho 38 nejde vybrat (postupně jsem zkoušel všechny v phpMyAdminu na serveru, takže nějakou chybu v mých PHP skriptech jsem vyloučil) 3) 21 emailů které nejsou vybrat jsou jsou "@seznam.cz", zbytek různé. Všechny emaily v db jsou platné a funkční (posílal se na ně aktivační email) 4) během pokusů jsem přišel na to, že pokud provedu asi deset dotazů na jednu nefunkční adresu, tak začne fungovat a potom jde normálně vybrat, ale po chvilce opět fungovat přestane. 5) i když bylo mnohokrát vědecky dokázáno že bubáci a strašidla neexistující, tak ode dneška se před spaním dívám pod postel protože se tohle opravdu vymyká mému chápání. |
||
nightfish Profil |
#8 · Zasláno: 29. 6. 2008, 09:14:31
během pokusů jsem přišel na to, že pokud provedu asi deset dotazů na jednu nefunkční adresu, tak začne fungovat a potom jde normálně vybrat, ale po chvilce opět fungovat přestane.
hmm, to je opravdu zajímavé... kontroluješ návratové hodnoty všech funkcí, které používáš? máš zapnutý error_reporting na E_ALL? jsi si jistý, že data, která porovnáváš, se opravdu rovnají? (nedávno tu v jednom vlákně chlapec přišel na to, že má v databázi bílé znaky - konkrétně konce řádků - kvůli kterým porovnávání neprojde) - udělej si z tabulky export (třeba přes phpMyAdmina) a podívej se na data a taky by nemuselo být od věci všechna data vstupující do databáze otrimovat a oslashovat (mysql_real_escape_string) |
||
Časová prodleva: 16 let
|
0