Jakub L.

Jakub L. Programista

Temat: [mysql] select * from baza where ...

Szymon G.:
A proszę (od razu mówię, że to tak na szybko pisane, coś może być nie tak, acz sens chyba jest OK):


$dsn = 'mysql:dbname=wp;host=127.0.0.1';
$user = 'login';
$password = 'password';
$dbh = null;

[b]try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}[/b]

$sth = $dbh->prepare($sql);
$sth->bindValue(':rok', $_POST['rok'], PDO::PARAM_INT);
$sth->bindValue(':miesiac', $_POST['miesiac'], PDO::PARAM_INT);

$sth->execute();
$result = $sth->fetchAll();

PS) oczywiście krytyka wszelka mile jest widziana.

To ja się zapytam o iedologię, bo interesują mnie motywacje i nawyki robienia takiego a nie innego kodu: po co jest tamto wyboldowane try/catch w dokładnie tamtym miejscu?

Jak tam poleci wyjątek, to cała reszta raczej pójdzie do piachu bo $dbh będzie niepoprawne, więc prepare się nie powiedzie, w zależności od konfiguracji pójdzie FALSE albo następny exception albo jeszcze inne cuda?
Nie lepiej skończyć całej imprezy, albo objąć całośćw try/catch, i w zależności od rodzaju wyjątku posprzątać?

konto usunięte

Temat: [mysql] select * from baza where ...

Jakub L.:
Rafał Wardas:
;-) pojęcie względne.. ale oczywiście macie racje :

Może meteoryt spadł i przed tym kodem jest :


$_POST['rok'] = isset($_POST['rok']) ? intval($_POST['rok']) : 0;

Może zamiast modyfikować tablicę $_POST (bo może się jeszcze oryginalna wartość kiedyś przyda) wyrzucić to do nowej zmiennej?
Ale co ma jedno z drugim wspólnego : Bindowanie padło już ze 3 razy w wątku i tego się powinno trzymać.
A to padło w takim kontekście: że obojętnie co byś nie wepchnął to i tak co najwyżej zmienisz warunek filtracji albo popsujesz.Rafał Wardas edytował(a) ten post dnia 07.01.10 o godzinie 21:29
Jakub L.

Jakub L. Programista

Temat: [mysql] select * from baza where ...

Rafał Wardas:
Jakub L.:
Rafał Wardas:
;-) pojęcie względne.. ale oczywiście macie racje :

Może meteoryt spadł i przed tym kodem jest :


$_POST['rok'] = isset($_POST['rok']) ? intval($_POST['rok']) : 0;

Może zamiast modyfikować tablicę $_POST (bo może się jeszcze oryginalna wartość kiedyś przyda) wyrzucić to do nowej zmiennej?
Ale co ma jedno z drugim wspólnego : Bindowanie padło już ze 3 razy w wątku i tego się powinno trzymać.

Modyfikacja danych wejściowych może być równie nieprzyjemna jak sql injection.
A to padło w takim kontekście: że obojętnie co byś nie wepchnął to i tak co najwyżej zmienisz warunek filtracji albo popsujesz.

Jest sens przygotowywać i bindować pojedyncze zapytanie inny niż sql injection (któremu można zapobiec na piechotę przez ręczną walidację zmiennej)?
Jako bonus: jeżeli baza nie wspiera prepared statements?

konto usunięte

Temat: [mysql] select * from baza where ...

Jakub L.:
..
....

Modyfikacja danych wejściowych może być równie nieprzyjemna jak sql injection.
;) No tak.
A to padło w takim kontekście: że obojętnie co byś nie wepchnął to i tak co najwyżej zmienisz warunek filtracji albo popsujesz.

Jest sens przygotowywać i bindować pojedyncze zapytanie inny niż sql injection (któremu można zapobiec na piechotę przez ręczną walidację zmiennej)?
Jako bonus: jeżeli baza nie wspiera prepared statements?
A kiedyś ludzie na kartach perforowanych programowali... ;-)
Jeżeli korzystasz ze zbyt ubogiej technologii to nie użyjesz ;) w czym rzecz?
Michał Jarosz

Michał Jarosz Frontend Developer &
Team Leader

Temat: [mysql] select * from baza where ...

Ta o której mowa akurat wspiera, więc jw.

Ale wam się udało z prostego pytania zrobić akademicką dyskusję :P

konto usunięte

Temat: [mysql] select * from baza where ...

Jakub L.:
Szymon G.:
A proszę (od razu mówię, że to tak na szybko pisane, coś może być nie tak, acz sens chyba jest OK):


$dsn = 'mysql:dbname=wp;host=127.0.0.1';
$user = 'login';
$password = 'password';
$dbh = null;

[b]try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}[/b]

$sth = $dbh->prepare($sql);
$sth->bindValue(':rok', $_POST['rok'], PDO::PARAM_INT);
$sth->bindValue(':miesiac', $_POST['miesiac'], PDO::PARAM_INT);

$sth->execute();
$result = $sth->fetchAll();

PS) oczywiście krytyka wszelka mile jest widziana.

To ja się zapytam o iedologię, bo interesują mnie motywacje i nawyki robienia takiego a nie innego kodu: po co jest tamto wyboldowane try/catch w dokładnie tamtym miejscu?

Jak tam poleci wyjątek, to cała reszta raczej pójdzie do piachu bo $dbh będzie niepoprawne, więc prepare się nie powiedzie, w zależności od konfiguracji pójdzie FALSE albo następny exception albo jeszcze inne cuda?
Nie lepiej skończyć całej imprezy, albo objąć całośćw try/catch, i w zależności od rodzaju wyjątku posprzątać?

Racja, lepiej. Dla tak prostego skryptu można by równie dobrze wywalić całe to try/catch.

Następna dyskusja:

SELECT Biuletyn FROM Golden...




Wyślij zaproszenie do