Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Prawidłowe zapytania
Forum PHP.pl > Forum > Przedszkole
nexis
Witam,

jak powinny wyglądać prawidłowe zapytania do bazy danych MySQL?

Zwykle używam takich:

  1. <?php
  2. $query  = 'SELECT pole FROM tabela';
  3. $query  = mysql_query($query);
  4. $result = mysql_fetch_array($query);
  5. ?>


W zapytaniu nie ma zmiennych, więc używam: ' '.

Ale jak powinno wyglądać takie zapytanie (co w nim należy poprawić)?

  1. <?php
  2. $query  = "SELECT pole FROM tabela WHERE id = '$_GET['wartosc']'";  // wiem, że to jest źle
  3. $query  = mysql_query($query);
  4. $result = mysql_fetch_array($query);
  5. ?>
nospor
zabezpieczenia przed atakami:
http://forum.php.pl/index.php?showtopic=23258

umiejetnosc wstawiania zmiennych do stringu:
http://pl.php.net/manual/pl/language.types.string.php
oraz
http://pl.php.net/manual/pl/language.operators.string.php
smile.gif
nexis
W podanych przez ciebie przykładach nie było wzmianki o takim przypadku

  1. <?php
  2. $query = "SELECT pole FROM tabela WHERE id = '$_GET['wartosc']'";
  3. ?>


a jedynie o takim

  1. <?php
  2. $zmienna = $_GET['wartosc'];
  3. $query = "SELECT pole FROM tabela WHERE id = '$zmienna'";
  4. ?>


Ale po co dodawać kolejną linię kodu jak to na pewno można poprawić? Mogę prosić o poprawioną linijkę?
nospor
Jakbys nie zauwazyl, to podalem ci jeszcze linki do manuali. zapoznaj sie z laski swojej z nimi, a bedziesz wiedzial jak to poprawic smile.gif
nexis
Czyli tak jest poprawnie?

  1. <?php
  2. $query = "SELECT pole FROM tabela WHERE id = '".$_GET['wartosc']."'";
  3. ?>


Teraz z kolei jak już zmienna nie jest bezpośrednio w wyrażeniu przydałoby się opuścić podwójny cudzysłów.

  1. <?php
  2. $query = 'SELECT pole FROM tabela WHERE id = ''.$_GET['wartosc'].''';
  3. ?>


Czy nadal jest coś źle?
nospor
No jesli masz gdziesz ataki typu sql injection - to tak smile.gif a wzasadzie to prawie, gdyz zakladam ze id to liczba,a liczb w mysql nie bierze się w ciapki

  1. <?php
  2.  
  3. $query = 'SELECT pole FROM tabela WHERE id = '.((int)$_GET['wartosc']);
  4.  
  5. ?>

ale to wszytko bylo w linkach. wystarczylo zlozyc smile.gif

przenosze na przedszkole
nexis
A jeśli $id nie będzie liczbą i po warunku jeszcze będzie coś w zapytaniu, np.:

  1. <?php
  2. $query = 'SELECT pole FROM tabela WHERE id = ''.$_GET['wartosc'].'' ORDER BY id';
  3. ?>


To jest poprawne?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.