Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se Swiftu. Zároveň využij výhodnou slevovou akci až 30 % zdarma při nákupu e-learningu - více informací.
discount 30 + hiring

Diskuze: Jak selectovat specifické jedno pole v MySQL

Aktivity
Avatar
šíma
Člen
Avatar
šíma:8.10.2020 13:45

Ahoj, chtěl jsem se zeptat, jak mám použít PHP příkaz if na databázi. Takhle, vím že se ten příkaz píše takto:

if(mysql_query(MySQL příkaz)){   PHP kód   }

ale ptám se, jak mám třeba udělat, abych zjistil, jestli je hodnota ve sloupci drevorubec a řádku [jméno přihl. uživatele] jedna a pokud ano, spustil se příkaz.

Zkusil jsem: Googlit, a nic jsem nevygooglil.

Chci docílit: Snažím se vybrat křížení sloupce a řádku a zjistit jeho hodnotu.

Odpovědět
8.10.2020 13:45
šíma = programátor !!!
Avatar
Jan Poláček
Tvůrce
Avatar
Odpovídá na šíma
Jan Poláček:8.10.2020 14:34

Ahoj,

tak za mě to je něco ve smyslu:

$zkus = Db::query("SELECT id FROM tabulka WHERE jmeno_uzivatele=? AND drevorubec=?","jmeno",1);
if($zkus){
//ANO, proveď
}

samozřejmě se to dá zkrátit a dát dotaz do IF.

Nahoru Odpovědět
8.10.2020 14:34
Instrukce na adrese 0x77104f29 odkazovala na adresu paměti 0x00000014. S pamětí nelze provést operaci: written.
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:8.10.2020 15:07

mysql_query se uz leta nepouziva, protoze nema prepared statement, viz ten sql dotaz od JP s temi otazniky. V mysql by to vypadalo takto:

https://www.php.net/manual/en/function.mysql-real-escape-string.php
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));
 
Nahoru Odpovědět
8.10.2020 15:07
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
šíma
Člen
Avatar
šíma:8.10.2020 17:27

No a ještě jak mám teda do toho dotazu dát jméno přihlášeného uživatele?

Nahoru Odpovědět
8.10.2020 17:27
šíma = programátor !!!
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na šíma
Peter Mlich:9.10.2020 8:07
// polackovo reseni
$query = "SELECT `id` FROM `tabulka` WHERE `jmeno_uzivatele`=? AND `drevorubec`=?";
$result = Db::query($query, "jmeno uzivatele", 1);
// vysledek: " SELECT `id` FROM `tabulka` WHERE `jmeno_uzivatele`='jmeno uzivatele' AND `drevorubec`=1 ";
// reseni podle dokumentace php.net - online, example 1 u funkce mysql-real-escape-string
$query = "SELECT * FROM `users` WHERE `user`='%s' AND `password`='%s'";
$query = sprintf($query,
            mysql_real_escape_string($user), //"jmeno uzivatele",
            mysql_real_escape_string($password));"heslo",
// vysledek: " SELECT * FROM `users` WHERE `user`='jmeno uzivatele' AND `password`='heslo' "
$result = mysql_query($query);

Neni mozne, ze by sis prehledl na prave strane v dokumentaci tuto funkci. Ledaze by ses tam ani nepodival a nezajimalo te, jake funkce mysql tam ma. Nebo aspon zkusit googlovat reseni. :)
sprintf - je funkce, ktera doplnuje text do stringu, podle zadaneho pravidla, treba %s je formatovani jako string, opet viz dokumentace php.net, tam je to krasne popsane. Ale muzes pouzit i str_replace nebo preg_replace. Str_replace by melo byt pro tuto operaci rychlejsi. Kdyby slo o nahrazovani 1 znaku, tak je rychlejsi strtr.

Editováno 9.10.2020 8:07
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět
9.10.2020 8:07
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.