Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][SQL] PDO - kilka pytań
desavil
post
Post #1





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

Ostrzeżenie: (0%)
-----


Witajcie,

Postanowiłem przejść z mysql_query na PDO. Jestem w tym temacie jak nowy.
We większości poradników widzę podczas rozpoczęcia połączenia funkcję try{} oraz na końcu catch(){}
Czy jest to wymagane, czemu to służy?

W pliku z funkcjami mam połączenie z bazą po przez PDO:
  1. function con(){
  2. try{ $pdo = new PDO('mysql:host=localhost;dbname=xxx', 'xxx', 'xxx', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); }
  3. catch(PDOException $e){ echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  4. }


Lecz po wykonaniu:
  1. $stmt = $pdo -> query('SELECT * FROM xxx WHERE xxx');
  2. foreach($stmt as $row){
  3. echo '<li>'.$row['nazwa'].': '.$row['opis'].'</li>';
  4. }

Dostaję błędy, że obiekt nie jest w klasie czy coś takiego, po przez brakujące try.
W jaki sposób dodać te try do zapytań?
A może po prostu w funkcji łączenia usunąć try i nie będzie problemu i nie będzie ono wymagane do zapytań?


Mam jeszcze jedno pytanie.
Jakich typów zapytać używać, co jest bezpieczniejsze, szybsze.
Typu:
  1. SELECT * FROM xx WHERE yy=zz

Czy:
  1. SELECT id,typ FROM xx WHERE yy=zz


Tak samo z dodawaniem rekordów używać:
  1. INSERT INTO produkty SET `nazwa`='nazwa', `opis`='opis'

Czy:
  1. prepare('INSERT INTO `produkty` (`nazwa`, `opis`) VALUES( :nazwa, :opis,)');


Cały czas w mysql_query używałem tych pierwszych, czy robiłem duży błąd jeżeli chodzi o bezpieczeństwo?

Pozdrawiam, i dziękuję za wszystkie odpowiedzi.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
desavil
post
Post #2





Grupa: Zarejestrowani
Postów: 339
Pomógł: 3
Dołączył: 15.10.2008
Skąd: Internet

Ostrzeżenie: (0%)
-----


Błąd był w zapytaniu, ale takie zapytanie chyba nie ma sensu, da się to zapisać inaczej?:
  1. $stmt = $pdo -> query('SELECT * FROM `users` WHERE `lol1`=\''.$lol1.'\' AND `lol2`=\''.$lol2.'\' AND `status`=\'1\' AND `country`=\'PL\'');

Czy tylko tak, jeżeli używam ', znów jak użyje "SELECT to przez " będzie znów mniej optymalne.

Macie jakieś pomysły?

Ten post edytował desavil 16.08.2011, 11:27:17
Go to the top of the page
+Quote Post
skowron-line
post
Post #3





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Cytat(desavil @ 16.08.2011, 10:38:30 ) *
Błąd był w zapytaniu, ale takie zapytanie chyba nie ma sensu, da się to zapisać inaczej?:
  1. $stmt = $pdo -> query('SELECT * FROM `users` WHERE `lol1`=\''.$lol1.'\' AND `lol2`=\''.$lol2.'\' AND `status`=\'1\' AND `country`=\'PL\'');

Czy tylko tak, jeżeli używam ', znów jak użyje "SELECT to przez " będzie znów mniej optymalne.

Macie jakieś pomysły?



  1. $stmt = $pdo -> query('SELECT * FROM `users` WHERE `lol1`="'.$lol1.'" AND `lol2`="'.$lol2.'" AND `status`=1 AND `country`="PL"');

bardziej optymalnie nie będzie. Intów się nie escapuje, bo to spowalnia zapytanie. Poczytaj na necie o optymalizacji zapytań.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 14:51