---
title: "Säkerhet i mySQL?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/180507-säkerhet-i-mysql/page2"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "alioooop"
published: "2009-10-01T09:56:04.000Z"
updated: "2009-10-10T10:40:53.000Z"
replies: 39
views: 3824
page: 2
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/180507-säkerhet-i-mysql"
---

# Säkerhet i mySQL?

_Sida 2 av 2._

## #21 — alioooop, 2009-10-01T16:11Z

> **[jme skrev:](https://www.webforum.nu/p/1482577)**
>
> 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? =)

Permalänk: https://www.webforum.nu/p/2206629

## #22 — colione, 2009-10-01T16:14Z

> **[alioooop skrev:](https://www.webforum.nu/p/1482578)**
>
> 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.

Permalänk: https://www.webforum.nu/p/2206630

## #23 — alioooop, 2009-10-01T16:19Z

> **[colione skrev:](https://www.webforum.nu/p/1482579)**
>
> 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 =)

Permalänk: https://www.webforum.nu/p/2206631

## #24 — jme, 2009-10-01T16:21Z

> **[alioooop skrev:](https://www.webforum.nu/p/1482578)**
>
> 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.

```php
$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']) );
```

Permalänk: https://www.webforum.nu/p/2206632

## #25 — jme, 2009-10-01T16:25Z

> **[alioooop skrev:](https://www.webforum.nu/p/1482580)**
>
> 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). "

Permalänk: https://www.webforum.nu/p/2206633

## #26 — alioooop, 2009-10-01T16:27Z

> **[jme skrev:](https://www.webforum.nu/p/1482581)**
>
> Ja det beror ju på om du kör med prepared statements eller SQL rakt av.
> 
>
>
> ```php
> $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
<?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'\])?

Permalänk: https://www.webforum.nu/p/2206634

## #27 — jme, 2009-10-01T16:29Z

Ja, det är säkert.

Permalänk: https://www.webforum.nu/p/2206635

## #28 — colione, 2009-10-01T16:29Z

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

Permalänk: https://www.webforum.nu/p/2206636

## #29 — alioooop, 2009-10-01T16:30Z

tack för all er hjälp :D alla på detta forum är alltid så hjälpsamma =)

Permalänk: https://www.webforum.nu/p/2206637

## #30 — jme, 2009-10-01T16:32Z

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.

Permalänk: https://www.webforum.nu/p/2206638

## #31 — alioooop, 2009-10-01T16:40Z

> **[jme skrev:](https://www.webforum.nu/p/1482587)**
>
> 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? =)

Permalänk: https://www.webforum.nu/p/2206639

## #32 — jme, 2009-10-01T17:53Z

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.

Permalänk: https://www.webforum.nu/p/2206646

## #33 — alioooop, 2009-10-02T10:41Z

> **[jme skrev:](https://www.webforum.nu/p/1482595)**
>
> 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

Permalänk: https://www.webforum.nu/p/2206679

## #34 — jme, 2009-10-02T11:04Z

> **[alioooop skrev:](https://www.webforum.nu/p/1482632)**
>
> 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...

Permalänk: https://www.webforum.nu/p/2206685

## #35 — alioooop, 2009-10-02T11:13Z

oo men det gör jag också =) men tack för tipset

Permalänk: https://www.webforum.nu/p/2206686

## #36 — alioooop, 2009-10-10T06:15Z

hej igen :)

hur tar man ut alla celler från tabellen?

```php
<?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

Permalänk: https://www.webforum.nu/p/2207515

## #37 — alioooop, 2009-10-10T06:49Z

löste det =)

Permalänk: https://www.webforum.nu/p/2207516

## #38 — MickeA.com, 2009-10-10T07:55Z

...och som vanligt kan du hjälpa andra genom att tala om hur du gjorde..

Permalänk: https://www.webforum.nu/p/2207520

## #39 — alioooop, 2009-10-10T07:57Z

```php
<?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']; 
} 

?>
```

Permalänk: https://www.webforum.nu/p/2207521

## #40 — jme, 2009-10-10T10:40Z

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

Permalänk: https://www.webforum.nu/p/2207532

---

Tråden på webben: https://www.webforum.nu/amne/php/180507-säkerhet-i-mysql/page2  
Föregående sida: https://www.webforum.nu/amne/php/180507-säkerhet-i-mysql.md
