Zadejte hledaný výraz...

Kde přesně mám syntaktickou chybu v tomto SQL dotazu?

Roman Kocian
verified
rating uzivatele
27. 3. 2014 21:26:02
Ahoj, mám menší problém s voláním do databáze SELECT.
Výpis z databáze je následující:
Co mě zaráží tak v jedné databázi na localhostu mi to funguje a v jiné ne.
Popis:
Potřebuje aby dotaz ověřil zda uživatelské jméno, které je vepsáno do form je již v databázi anebo ne.
Pokud někoho něco napadně budu rád:)
ČAO
27. 3. 2014 21:26:02
https://webtrh.cz/diskuse/kde-presne-mam-syntaktickou-chybu-v-tomto-sql-dotazu/#reply1010318
Adam
verified
rating uzivatele
(6 hodnocení)
27. 3. 2014 21:30:53
mysql nezna && a != misto toho pouzi AND NOT tusim
tak oprava != zna ale && ne viz zde https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html
27. 3. 2014 21:30:53
https://webtrh.cz/diskuse/kde-presne-mam-syntaktickou-chybu-v-tomto-sql-dotazu/#reply1010317
Martin Kanala
verified
rating uzivatele
(23 hodnocení)
27. 3. 2014 21:34:07
Napsal Funn3r;1072921
mysql nezna && a != misto toho pouzi AND NOT tusim
tak oprava != zna ale && ne viz zde https://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html
!= není problémem, funguje bez potíží.
27. 3. 2014 21:34:07
https://webtrh.cz/diskuse/kde-presne-mam-syntaktickou-chybu-v-tomto-sql-dotazu/#reply1010316
Když už tak vybírejte data takto, funguje to na všech verzí MySQL http://sqlfiddle.com/#!2/04212/2
27. 3. 2014 21:34:19
https://webtrh.cz/diskuse/kde-presne-mam-syntaktickou-chybu-v-tomto-sql-dotazu/#reply1010315
Roman Kocian
verified
rating uzivatele
27. 3. 2014 21:36:31
jj to je pravda ovšem píše mi to že je chyba v syntax na řádku 1 tomu právě moc nerozumím co tam může být špatně. Jinak && i != mi na druhé db běží OK. Zaráží mě, že stejná syntax má rozdílné vysledky na 2 db...
27. 3. 2014 21:36:31
https://webtrh.cz/diskuse/kde-presne-mam-syntaktickou-chybu-v-tomto-sql-dotazu/#reply1010314
tomve
verified
rating uzivatele
(22 hodnocení)
27. 3. 2014 22:19:18
problém č.1 ) sql injection => mysql_real_escape_string($proměnna); č.2) neukončený user_id string; č.3) mysql knihovna v php 5.5.0 není, tak dělej s mysqli nebo s pdo
a) za mě podle tebe:
$sql = "SELECT username
FROM site_user
WHERE username = ' ".mysql_real_escape_string($username)." ' AND user_id != ' ". mysql_real_escape_string($user_id)." ' ";
$result = mysql_query($sql, $db) or die(mysql_error($db));
b) za mě úplně:
$result = mysql_query("SELECT username FROM site_user WHERE username = ' ".mysql_real_escape_string($username)." ' AND user_id != ' ". real_escape_string($user_id)." ' ") or die(mysql_error());
edit: kapek editu, bez barev se to blbě píše
---------- Post added 27.03.2014 at 22:22 ----------
Napsal filipsedivy;1072925
Když už tak vybírejte data takto, funguje to na všech verzí MySQL http://sqlfiddle.com/#!2/04212/2
select s * je serverova sebevražda
27. 3. 2014 22:19:18
https://webtrh.cz/diskuse/kde-presne-mam-syntaktickou-chybu-v-tomto-sql-dotazu/#reply1010313
korwin
verified
rating uzivatele
(25 hodnocení)
27. 3. 2014 23:43:27
Co je na tom sebevražednýho :D když potřebuju všechny sloupce, tak to nebudu vypisovat ne :D
27. 3. 2014 23:43:27
https://webtrh.cz/diskuse/kde-presne-mam-syntaktickou-chybu-v-tomto-sql-dotazu/#reply1010312
tomve
verified
rating uzivatele
(22 hodnocení)
28. 3. 2014 00:03:35
Napsal korwin;1072956
Co je na tom sebevražednýho :D když potřebuju všechny sloupce, tak to nebudu vypisovat ne :D
tak o tom by snad šlo uvažovat, ale já jsem zvykléj to tak psát, protože málo kdy potřebuju všechny sloupce
jinak http://stackoverflow.com/a/65532/1905799
---------- Post added 28.03.2014 at 00:05 ----------
jinak roo vybírá jen "username" a tam prdnout select * je fakt kapek mimo
28. 3. 2014 00:03:35
https://webtrh.cz/diskuse/kde-presne-mam-syntaktickou-chybu-v-tomto-sql-dotazu/#reply1010311
Lukáš
verified
rating uzivatele
(22 hodnocení)
28. 3. 2014 00:33:21
Co takhle rovnou zkontrolovat počet řádků z query:
$q = mysql_num_rows(mysql_query("SELECT username FROM site_user WHERE username='".mysql_real_escape_string($_POST)."' ")) or die(mysql_error());
if($q > "0"){
// uzivatel je v databazi, exisituje
}else{
// uzivatel v databazi neni, muzete ho pridat
}
Pro porovnání v query používej AND, =, !=, OR
28. 3. 2014 00:33:21
https://webtrh.cz/diskuse/kde-presne-mam-syntaktickou-chybu-v-tomto-sql-dotazu/#reply1010310
korwin
verified
rating uzivatele
(25 hodnocení)
28. 3. 2014 10:41:28
Jo já jen že ta funkce * tam prostě je a občas se hodí a nevím, že by byla nebezpečná. To vypsání je ale většinou lepší, jelikož aspoň pak hned vidíš jak se ty sloupce jmenují a můžeš si je případně přejmenovat.
28. 3. 2014 10:41:28
https://webtrh.cz/diskuse/kde-presne-mam-syntaktickou-chybu-v-tomto-sql-dotazu/#reply1010309
qwertr
verified
rating uzivatele
(7 hodnocení)
28. 3. 2014 11:30:36
Poviem ti v com je napriklad problem pri udrzbe. Maz tabulku kde si mal 5 stlpcov. slpec1, stlpec2, stlpec3, stlpec4, stlpec5. Teraz upravis strukturu tabulky a vyhodis stlpec3.
Pokial by si mal pisany select stlpec1, stlpec2, stlpec3, stlpec4, stlpec5 FROM tabulka tak ti zahlasi chybu uz ten select.
Pokial budes mat select * from tabulka tak sa ti stane to, ze sa ti posunu hodnoty.
28. 3. 2014 11:30:36
https://webtrh.cz/diskuse/kde-presne-mam-syntaktickou-chybu-v-tomto-sql-dotazu/#reply1010308
tomve
verified
rating uzivatele
(22 hodnocení)
28. 3. 2014 12:40:58
to je fakt, jenže když máš web s 40k uip/d tak tě hosting začne otravovat, že je to moc náročný, ať to změníš - pak opravuješ po programátorovi, co všude sázel *, i když potřeboval jeden sloupec
28. 3. 2014 12:40:58
https://webtrh.cz/diskuse/kde-presne-mam-syntaktickou-chybu-v-tomto-sql-dotazu/#reply1010307
Kovboj
verified
rating uzivatele
(13 hodnocení)
28. 3. 2014 13:32:52
Napsal qwertr;1073054
Poviem ti v com je napriklad problem pri udrzbe. Maz tabulku kde si mal 5 stlpcov. slpec1, stlpec2, stlpec3, stlpec4, stlpec5. Teraz upravis strukturu tabulky a vyhodis stlpec3.
Pokial by si mal pisany select stlpec1, stlpec2, stlpec3, stlpec4, stlpec5 FROM tabulka tak ti zahlasi chybu uz ten select.
No jo, ale pokud bys jmenovitě z databáze četl "sloupec3", tak se dá předpokládat že to děláš proto že s ním dále pracuješ. A pokud ho vyhodíš z tabulky ale skripty neupravíš, tak máš problém i pokud bys četl "všechno" pomocí hvězdičky ;-)
Jinak co se mě týče, pokud je tabulka malá a má třeba jen 5 sloupců, klidně bych tak dal hvězdičku a neřešil to. Pokud má sloupců 50 a já budu pracovat třeba jen se 3 z nich, tak bych je určitě vybíral jmenovitě.
28. 3. 2014 13:32:52
https://webtrh.cz/diskuse/kde-presne-mam-syntaktickou-chybu-v-tomto-sql-dotazu/#reply1010306
qwertr
verified
rating uzivatele
(7 hodnocení)
28. 3. 2014 14:23:32
Napsal Kovboj;1073096
No jo, ale pokud bys jmenovitě z databáze četl "sloupec3", tak se dá předpokládat že to děláš proto že s ním dále pracuješ. A pokud ho vyhodíš z tabulky ale skripty neupravíš, tak máš problém i pokud bys četl "všechno" pomocí hvězdičky ;-)
Pokial mam v selecte vymenovany stlpec3, tak my staci vyhladat v kode text stlpec3 a upravit len tie selecty kde je spomenuty stlpec3 a ostatne ma nezaujimaju.
Pokial mam select * tak musim prechadzat vsetky selecty a upravit ich. Napr. mal som select * from tabulka a tahal som len stlpec1 a stlpec5 a to pomocou indexov, ze som sa odkazoval na idx = 1 a idx = 5. No len teraz v tom selecte * je stlpec5 nie piaty stlpec, ale uz stvrty stlpec, takze ked ich chcem vytiahnut tak musim pristupovat na idx = 1 a idx = 4 takze musim prechadzat vsetky selecty ktore pristupuju k tabulke na ktorej som zmenil strukturu
28. 3. 2014 14:23:32
https://webtrh.cz/diskuse/kde-presne-mam-syntaktickou-chybu-v-tomto-sql-dotazu/#reply1010305
tomve
verified
rating uzivatele
(22 hodnocení)
28. 3. 2014 14:26:54
a proto je třeba před programováním udělat dobrý návrh struktury
28. 3. 2014 14:26:54
https://webtrh.cz/diskuse/kde-presne-mam-syntaktickou-chybu-v-tomto-sql-dotazu/#reply1010304
Pro odpověď se přihlašte.
Přihlásit