Jag rekommenderar också PDO.
okej, behöver man använda sig utav mysql_real_escape_string() för att få det säkert när man gör en PDO? =)
39 svar · 3 790 visningar · startad av alioooop · sida 2 av 2
hej håller på att försöka få min sida säker men hittar så många olika sätt men alla har sina negativa sidor. då är min fråga, vad ska jag använda mig utav för funktion eller om jag ska skriva en ultimat egen funktion, hur ska den se ut? såg även att vissa har &-tecken runt sina variabler som ska in i databasen, vad ger detta? frågan har säkert ställts tusen ggr förr men hittade inte ett bra sva
Läs frågan i sin helhet →Jag rekommenderar också PDO.
okej, behöver man använda sig utav mysql_real_escape_string() för att få det säkert när man gör en PDO? =)
okej, behöver man använda sig utav mysql_real_escape_string() för att få det säkert när man gör en PDO? =)
Inte om du använder prepared statements. Använder du däremot $pdo->exec("FANCY SQL MED DATA FRÅN ANVÄNDAREN"); är det ingen skillnad mot att göra en mysql_query("FANCY SQL MED DATA FRÅN ANVÄNDAREN"); och då måste du escapea datan.
Inte om du använder prepared statements. Använder du däremot $pdo->exec("FANCY SQL MED DATA FRÅN ANVÄNDAREN"); är det ingen skillnad mot att göra en mysql_query("FANCY SQL MED DATA FRÅN ANVÄNDAREN"); och då måste du escapea datan.
okej, vad är det som gör prepared statment säkrare? :) vad skulle hända om jag skriver in sträng som skulle normalt få min databas förstörd? dvs SQL injection =)
okej, behöver man använda sig utav mysql_real_escape_string() för att få det säkert när man gör en PDO? =)
Ja det beror ju på om du kör med prepared statements eller SQL rakt av.
$db = new PDO(...);
// inte skyddad, även om PDO används
$db->query('SELECT * FROM user WHERE user_id = ' . $_GET['user_id']);
// Säker!
$db->query('SELECT * FROM user WHERE user_id ' . $db->quote($_GET['user_id']) );
okej, vad är det som gör prepared statment säkrare? :) vad skulle hända om jag skriver in sträng som skulle normalt få min databas förstörd? dvs SQL injection =)
http://fi2.php.net/pdo.prepared-statements
säger bl a följande:
"The parameters to prepared statements don't need to be quoted; the driver automatically handles this. If an application exclusively uses prepared statements, the developer can be sure that no SQL injection will occur (however, if other portions of the query are being built up with unescaped input, SQL injection is still possible). "
Ja det beror ju på om du kör med prepared statements eller SQL rakt av.
$db = new PDO(...); // inte skyddad, även om PDO används $db->query('SELECT * FROM user WHERE user_id = ' . $_GET['user_id']); // Säker! $db->query('SELECT * FROM user WHERE user_id ' . $db->quote($_GET['user_id']) );
<?php
// configuration
$dbtype = "sqlite";
$dbhost = "localhost";
$dbname = "test";
$dbuser = "root";
$dbpass = "admin";
// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
// new data
$title = '$_GET['title']';
$author = 'Jack Hijack';
// query
$sql = "INSERT INTO books (title,author) VALUES (:title,:author)";
$q = $conn->prepare($sql);
$q->execute(array(':author'=>$author,
':title'=>$title));
?>
om man använder sig utav denna metod, är det där säkert? eller måste man använda sig utav $db->quote($_GET['title'])?
Ja, det är säkert.
Det är säkert. Inget behov av att använda $db->quote.
Finns dock inget behov av att sätta $dbtype till sqlite om du inte tänkte använda variablen. Speciellt inte som du connectar till databasen med en uri (mysql://). :p
tack för all er hjälp :D alla på detta forum är alltid så hjälpsamma =)
Det var så lite så :)
Glöm inte, att det är bra att validera användarens input redan innan den ens når databasfunktionerna. T ex vid formulärvalidering.
Det var så lite så :)
Glöm inte, att det är bra att validera användarens input redan innan den ens når databasfunktionerna. T ex vid formulärvalidering.
joo det är klart men om jag väntar mig en sträng så kan jag väl inte validera så ag vet att strängen inte innehåller något som förstör min databas? =)
Nej. Vad jag menar är att om användaren har skrivit "pekka" i fältet för ålder så är det rimligt att signalera det som ett fel. Ingen idé att låta database-lagret säga "nej", alternativt konvertrera "pekka" till 0 eller liknande.
Nej. Vad jag menar är att om användaren har skrivit "pekka" i fältet för ålder så är det rimligt att signalera det som ett fel. Ingen idé att låta database-lagret säga "nej", alternativt konvertrera "pekka" till 0 eller liknande.
okej men det gör jag redan :) har live validering
okej men det gör jag redan :) har live validering
Live validering? låter som javascript-baserat? Js-baserad validering är ok SÅ LÄNGE validerings görs även på serversidan...
oo men det gör jag också =) men tack för tipset
hej igen :)
hur tar man ut alla celler från tabellen?
<?php
// configuration
$dbtype = "sqlite";
$dbhost = "localhost";
$dbname = "test";
$dbuser = "root";
$dbpass = "admin";
// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
$title = 'PHP AJAX';
// query
$sql = "SELECT * FROM books WHERE title = ?";
$q = $conn->prepare($sql);
$q->execute(array($title));
$q->setFetchMode(PDO::FETCH_BOTH);
// fetch
while($r = $q->fetch()){
print_r($r);
}
?>
hittade det här men fattar inte hur man kommer åt varje cell i tabellraden :P
HJÄÄLP :P
löste det =)
...och som vanligt kan du hjälpa andra genom att tala om hur du gjorde..
<?php
// configuration
$dbtype = "sqlite";
$dbhost = "localhost";
$dbname = "test";
$dbuser = "root";
$dbpass = "admin";
// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
$title = 'PHP AJAX';
// query
$sql = "SELECT * FROM books WHERE title = ?";
$q = $conn->prepare($sql);
$q->execute(array($title));
$q->setFetchMode(PDO::FETCH_BOTH);
// fetch
while($r = $q->fetch()){
echo $r['kollumnnamnet'];
}
?>
Då du kör med:
$q->setFetchMode(PDO::FETCH_BOTH);
så fungerar även:
$r->kolumnNamnet;
PDO::FETCH_BOTH står för både:
FETCH_OBJECT
FETCH_ARRAY