Autor Zpráva
mot
Profil *
Zdravím, zkouším se seznámit s PDO. Mám funkci
function queryDBdata ($query)
{ 
    $result = mysql_query("$query");
    
    for ($i = 0; $i < @mysql_num_rows($result); $i ++)
    {
        $returnVar[$i] = @mysql_fetch_array ($result, MYSQL_ASSOC);
        
    }
    @mysql_free_result ($result);
    return ($returnVar);
}
a kontrolu přihlašovacích údajů
if($_POST['un'] AND $_POST['pw']){
    $dot="SELECT * FROM db
         WHERE
             un='{$_POST['un']}'
         AND passwd='".md5($_POST['pw'])."'
         ";
    $result=queryDBdata($dot);
    if(count($result)==1){
        echo "OK";
    }else{
        echo "KO";
    }
}
Bohužel vůbec nevím kde a jak začít. Byl by někdo ochoten a pomohl mi s přepsáním funkce?
Alphard
Profil
Přepsání funkce nic moc neřeší.
Bylo by vhodné zapomenout na ten způsob práce s databází, jak jej teď znáte.
Databázové dotazy se ideálně v běžném kódu nesestavují jako výsledné řetězce, ale pro parametry se do šablony dotazu vkládají speciální znaky. Při vykonávání dotazu se předejí konkrétní parametry zvlášť, což umožní databázové vrstvě správně escapovat data a zajistit tak bezpečnost.

Čisté PDO není úplně ideální, doporučoval bych použít dibi. Nicméně pokud chcete zůstat u čistého PDO, níže popsaný přístup podporuej pomocí php.net/manual/en/pdostatement.execute.php (je tam více možností, jak to syntakticky řešit, ale princip je stejný).

Dotaz psaný v dibi by poté mohl vypadat nějak takto:
$result = dibi::query('select * from db where un = %s and passwd = %s', $_POST['un'], mdp($_POST['pw']))->fetchAll()
případně třeba
$result = dibi::select('*')
            ->from('db')
            ->where('un = %s', $_POST['un'])
            ->where('passwd = %s', $_POST['pw'])
            ->fetchAll()

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: