• Hallo leden,
    De scripting taal PHP bevalt me goed, krijg het steeds beter en beter onder de knie! Alleen zijn er nog wat onduidelijkheden omtrent PDO.
    Waarom zou ik PDO gebruiken en geen MySQLi?
    Als ik een query uitvoer zoals het voorbeeld hier onder; Wat is hier meer veilig aan als het 2e voorbeeld?
    Voorbeeld 1:

    Code
    $query = $pdo->prepare('SELECT * FROM users WHERE gebruiker = :gebruiker');
    $query->bindParam(':gebruiker', $_POST['gebruiker']);$query->execute();


    Voorbeel 2:

    Code
    $query = $db->query("SELECT * FROM users WHERE gebruiker = '".$_POST['gebruiker']."'");


    Hier boven staan 2 voorbeelden, het eerste is PDO het tweede MySQLi. Hoe zorgt het PDO voorbeeld er voor dat het veiliger is tegen SQL-Injecties?
    De code van PDO, is praktiesch het zelfde als MySQLi alleen een aantal nieuwe termen die je moet onthouden! Denk aan; prepare, bindParam, execute, fetct(PDO::FETCH_OBJ), countRow
    Maar toch zie ik het verschil niet?
    Gr,
    Frenzo

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Bij voorbeeld 2 zet je het variable in de query, deze kan veranderd worden door middel van een SQL Injection, bij voorbeeld 2 worden de variables niet in de query zelf gezet dus moeilijker te veranderen. Wat voorbeeld 1 veiliger maakt.

  • Wat je nu hebt gepakt zijn twee voorbeelden waarvan de eerste al een voorsprong heeft op de tweede.


    PDO is een paar opzichten vooral beter dan MySQLI, als voorbeeld dat PDO meer databases ondersteund.
    Alleen zie ik, dat je al bent begonnen met MySQLI. Ik zou dan niet halverwege een project de overstap naar PDO maken, wat je kan doen is net zoals in voorbeeld 1 beginnen met prepared statement.


    Met bijvoorbeeld jouw gegeven voorbeeld wordt het ongeveer zo:

    PHP
    //$query = $db->query("SELECT * FROM users WHERE gebruiker = '".$_POST['gebruiker']."'");
    $stmt = $mysqli->prepare("SELECT id,naam,gebruikersnaam FROM users WHERE gebruiker = ?");
    $stmt->bind_param('s', $_POST['gebruiker']);
    $stmt->exeucte();
    $stmt->store_result();
    $stmt->bind_result($userId, $userName, $userUName);
    $stmt->fetch();
    $stmt->close();
  • Hallo Reza,


    Bedankt voor je uitleg, al moet ik zeggen ik snap hier dan weer minder van...


    Gr,
    Frenzo


    In het eerste voorbeeld die je liet zien(PDO) gebruik je een PDO prepared statement. Wat ik liet zien in mijn voorbeeld is ook een voorbeeld van een MySQLI prepared statement.


    In MySQLI werkt het helaas 'irritanter' doordat je verschillende methodes erbij moet toevoegen wil je bijvoorbeeld resultaat uit je query halen.
    Standaard(bijvoorbeeld een insert in je DB) is het prepare(), bind_param() en execute(). Dit is nog het zelfde als bij PDO.


    Bij MySQLI komt echter nog het stukje(bijvoorbeeld bij een select voor je DB) dat je jouw resultaat moet 'opslaan'(store_result()). Daarna moet je, wat je eerder via select had gekozen in de query, samenbinden in een variabel(bind_result).
    Om het uiteindelijk nog als resultaat te krijgen moet je nog fetch() gebruiken, en zoals gewoonlijk(volgens mij ook bij PDO) het afsluiten met close()

  • Wat je nu hebt gepakt zijn twee voorbeelden waarvan de eerste al een voorsprong heeft op de tweede.


    PDO is een paar opzichten vooral beter dan MySQLI, als voorbeeld dat PDO meer databases ondersteund.
    Alleen zie ik, dat je al bent begonnen met MySQLI. Ik zou dan niet halverwege een project de overstap naar PDO maken, wat je kan doen is net zoals in voorbeeld 1 beginnen met prepared statement.


    Met bijvoorbeeld jouw gegeven voorbeeld wordt het ongeveer zo:

    PHP
    //$query = $db->query("SELECT * FROM users WHERE gebruiker = '".$_POST['gebruiker']."'");
    $stmt = $mysqli->prepare("SELECT id,naam,gebruikersnaam FROM users WHERE gebruiker = ?");
    $stmt->bind_param('s', $_POST['gebruiker']);
    $stmt->exeucte();
    $stmt->store_result();
    $stmt->bind_result($userId, $userName, $userUName);
    $stmt->fetch();
    $stmt->close();


    Beter om in zo'n geval een echt voorbeeld te laten zien, ook om de werking juist uit te leggen

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!