Advies nodig mbt mysqli prepared statements in php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Juvl ius

Juvl ius

30/09/2012 19:11:12
Quote Anchor link
Hi, hopelijk kan iemand mij een advies geven. Ik ben mijn website aan het herschrijven naar mysqli (gebruik nu oude mysql) en wil graag wat duidelijkheid over het gebruik van prepared statements. Heb tal van tuts etc gelezen op internet maar kom er niet uit.

Mijn site heeft simpel gezegd een stel gebruikers die allemaal items kunnen plaatsen. De meeste queries zijn gebaseerd op userinput zoals $_GET etc. en dus biedt prepared statements de gewenste beveiliging, zo lees ik. Maar mijn queries worden in bijna elk geval slechts een keer uitgevoerd, is een prepared statement dan weer niet 'overdone'?

Het volgende is een voorbeeld. Van een bepaalde user wil ik alle geplaatste items weergeven en gebruik daarvoor de volgende code.

$sql="SELECT itemnaam, itembeschrijving, itemcategorie, datum FROM items WHERE username= ? ";
$result = $mysqli->prepare($sql);
$result->bind_param('s', $_GET['u']);
$result->execute();
$result->bind_result($itemnaam, $itembeschrijving, $itemcategorie, $datum);

while($result->fetch()){
echo $itemnaam ."--". $itembeschrijving."--".$itemcategorie."--".$datum;
}
$result->close()

$mysqli is hierbij de connectie met de database.
In werkelijkheid vraag ik info uit zo'n 20 kolommen op, en bind_result bevat dus ook 20 variabelen (kan dat sneller?).

Dit werkt allemaal prima, maar ik vraag me gewoon af of dit de beste manier is om het te doen voordat ik mijn hele site op deze manier ga verbouwen..
 
PHP hulp

PHP hulp

22/11/2024 11:16:11
 
Jaron T

Jaron T

30/09/2012 20:48:49
Quote Anchor link
Ik gebruik; http://www.php.net/manual/en/mysqli-result.fetch-assoc.php hier voor. Vind ik gemakkelijker dan alles binden. Een prepared statement is niet 'overdone' voor enkele queries. Je geeft namelijk zelf het antwoord al, de paramaters worden geescaped en je code wordt overzichtelijker.
 
Juvl ius

Juvl ius

30/09/2012 21:37:48
Quote Anchor link
@Jaron T, bedankt voor je reactie. Zou je kunnen uitleggen hoe je fetch_assoc hiervoor gebruikt. Als ik het zo op internet lees komt het in combinatie met een prepared statement niet makkelijk over.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

30/09/2012 23:18:38
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
$mysqli
= mysqli_connect("example.com", "user", "password", "database");

// lezen uit de database
$query="SELECT itemnaam, itembeschrijving, itemcategorie, datum FROM items WHERE username= ? ";
$result = $mysqli->query($query);
while($row = $result->fetch_assoc()) {
    // gelijkwaardig met jouw voorbeeld
    echo $row['itemnaam']."--". $row['itembeschrijving'].
    "--".$row['itemcategorie']."--".$row['datum']."<br/><br/>";
    
    //nog eens maar dan met foreach
    foreach($row as $key => $value) {
        echo $key.": ".$value."<br/>" ;
    }
}

$result->close();

// een nieuw item aanmaken
$arr['itemnaam'] = "appel";
$arr['itembeschrijving'] = "bla bla";
$arr['itemcategorie'] = "fruit";
$arr['datum'] = "2012-10-01";

// toevoegen aan de database
$query="INSERT INTO `items` (`itemnaam`, `itembeschrijving`, `itemcategorie`, `datum`)".
        " VALUES ('".$arr['itemnaam']."', '".$arr['itembeschrijving']."', '".
                    $arr['itemcategorie']."', '".$arr['datum']."');";
$result = $mysqli->query($query);
$result->close();

?>
Gewijzigd op 30/09/2012 23:22:25 door Frank Nietbelangrijk
 
Juvl ius

Juvl ius

01/10/2012 08:54:28
Quote Anchor link
Oké, maar nu is het geen prepared statement meer..?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

01/10/2012 09:45:40
Quote Anchor link
Aangezien je mysqli gebruikt heb je nog steeds de beschikking over de escape functie, en daarmee heb je de beveiging tegen sql injectie. Want een prepared statement op zich biedt die niet,dat doen de parameters die erbij horen. Afgezien van de beveiliging zijn prepared statements alleen zinvol als je kort achter elkaar dezelfde query uitvoert. En dat kan overigens ook gewoon met de gewone MySql extensie.
Gewijzigd op 01/10/2012 09:46:28 door Ger van Steenderen
 
Juvl ius

Juvl ius

01/10/2012 12:34:46
Quote Anchor link
De tegengestelde reacties van Ger van Steenderen en Jaron T is wat ik ook elders op internet tegenkom. Het maakt het niet makkelijker om een manier van coderen te kiezen.
Hopelijk kunnen meer mensen nog wat inbrengen in deze discussie.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.