PDO cơ bản

1 2 >>
MrT98 
  • MrT98 (SV!)  [Off]
  • Tester Tester....
 27 thg 6 • 13:26[TOP]
PDO là .... Hỏi google chắc biết.

Dưới đây là những cái cơ bản của giới tính, mà con người cần biết.

- Tạo kết nối tới Database:

  1. // config db
  2. define('dbHost',   'localhost');
  3. define('dbName', 'Name');
  4. define('dbUser',    'User');
  5. define('dbPass',   'Passw');
  6.  
  7. try {
  8.     $db = new \PDO('mysql:host=' . dbHost . ';dbname=' . dbName, dbUser, dbPass,
  9.         [
  10.             \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
  11.             \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
  12.             \PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'",
  13.             \PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,
  14.         ]
  15.     );
  16. } catch (\PDOException $e) {
  17.     echo '<h2>MySQL ERROR: ' . $e->getCode() . '</h2>';
  18.  
  19.     switch ($e->getCode()) {
  20.         case 1045:
  21.             exit('Access credentials (username or password) to a database are incorrect');
  22.  
  23.         case 1049:
  24.             exit('The name of a database is specified incorrectly');
  25.  
  26.         case 2002:
  27.             exit('Invalid database server');
  28.     }
  29.  
  30.     exit;
  31. }


Ngắn gọn hơn ta có thể dùng

  1. // config db
  2. define('dbHost',   'localhost');
  3. define('dbName', 'Name');
  4. define('dbUser',    'User');
  5. define('dbPass',   'Passw');
  6.  
  7. try {
  8.     $db = new \PDO('mysql:host=' . dbHost . ';dbname=' . dbName, dbUser, dbPass);
  9.     $db->exec("SET CHARACTER SET utf8");
  10. } catch (\PDOException $e) {
  11.     echo $e->getMessage();
  12.  
  13.     exit;
  14. }



Để ngắt kết nối khỏi Database
  1. <?php
  2. $db = null;



Ok, thế thôi, hết rồi.































Hết rồi, muốn gì nữa.




























Tìm gì??





























À chú ý khi làm chuyện ấy, ta cần phải có:

* $db->quote() cái này sẽ giúp cho việc mang bầu chở nên khó khăn hơn. Có thể hiểu là mang thai ngoài í muốn, hoặc là ... thôi. cứ tạm hiểu vậy đi.

Nó được dùng như sau:

  1. <?php
  2. $string = 'Tao muốn hack...';
  3. $string = $db->quote($string); // mày muốn hack??


Thực tế thì không ai làm truyện ấy 1 lần cả đúng không??
Vì vậy ta luôn phải dùng nó khi xxx...

Nó sẽ nâng cao bảo mật khi người dùng thực hiện truy vấn.... Cứ hiểu thế đã, tí quay lại sẽ hiểu.


* $db->query(); nó giống như mysqli_query()

Ví dụ: ta có đoạn code kiểm tra người dùng có tồn tại hay không?

  1. <?php
  2. $id = $_GET['id'];
  3. $user = $db->query("SELECT COUNT(*) FROM `users` WHERE `id` = " . $db->quote($id) . " ")->fetchColumn();
  4. if($user)
  5.     echo 'tồn tại';
  6. else
  7.     echo 'không!';


Đoạn code trên ta có $id được GET từ thành viên, như vậy rất nguy hiểm đúng không?

Nhưng khi ta dùng $db->quote() để bọc $id lại: thì nguy hiểm bằng không.googlesmile

Ở code trên, gái thấy T dùng fetchColumn() ?? fetchColumn() là clgt??

fetchColumn() sẽ trả về số hàng tìm được. (nó hoạt động khi ta chọn COUNT(*) )

fetchColumn() tương tự như mysqli_num_rows();




* Để lấy thông tin thành viên: ta có code sau

  1. <?php
  2. $request = $db->query("SELECT * FROM `users` ");
  3. while ($user = $request->fetch()) {
  4.     print_r($user);
  5. }


Code trên T dùng fetch() để lấy dữ liệu mảng.

fetch() tương tự như mysqli_fetch_array();

Ngoài fetch() ta cũng có fetchAll()

fetch()fetchAll() khác nhau là:
- fetch() sẽ trả về dữ liệu mảng của từng hàng một. như code trên T dùng vòng lặp để sử lý từng hàng đó.
- fetchAll() sẽ trả về tất cả các hàng. điều này khá tốn RAM máy chủ nếu dữ liệu quá lớn... vì thế T cảnh báo không nên dùng fetchAll() và cái này chắc méo cần ví dụ.



* Thêm dữ liệu vào bảng (đăng ký, post bài, ...)

Tạo thành viên mới
  1. <?php
  2. $nick = $_POST['nick'];
  3. $pass = $_POST['pass'];
  4. $db->prepare('
  5.    INSERT INTO `users` SET
  6.      `nick` = ?,
  7.      `pass` = ?,
  8.      `time` = ?,
  9.      `status` = \'Test\'
  10. ')->execute([
  11.     $nick,
  12.     $pass,
  13.     time(),
  14. ]);


Tự hỏi tại sao `nick` = ?

Dấu hỏi chấm đó là để sác định giá trị của nó được đặt ở bên dưới phần ->execute( và theo thứ tự.
- Như vậy ta chẳng phải no giá trị đầu vào của biến $nick, $pass được bảo mật hay chưa.



* Cập nhật dữ liệu.
  1. <?php
  2. $status = $_POST['status'];
  3. $pass = $_POST['pass'];
  4. $id = $_GET['id'];
  5. $db->exec("UPDATE `users` SET  `status`=" . $db->quote($status) . ", `pass`=" . $db->quote($pass) . " WHERE `id` = " . $db->quote($id) . " ");


Ta thấy $db->quote() đã giữ bảo mật cho chúng ta.

$db->exec() là func cấp cao, ta có thể dùng nó để INSERT(tạo dữ liệu), Delete(xoá), ...
Nhưng ta phải dùng $db->quote() để giữ bảo mật cho nó.
Đã chỉnh sửa
PMTproPMTpro
bkk711bkk711
ChuotiubeChuotiube
Garthbale, bkk711, PMTpro và 1 người khác
PMTpro 
  • PMTpro (Smd)  [Off]
  • Phù.Du!
 27 thg 6 • 13:44[#2]
Mà google k thấy "\" code của T lại có "\"
MrT98 
  • MrT98 (SV!)  [Off]
  • Tester Tester....
 27 thg 6 • 14:36[#3]
# PMTpro (27.06.2017 / 13:44)
Mà google k thấy "\" code của T lại có "\"
Có hay ko cũng chả sao đâu.
PMTproPMTpro
hhhhhhhhhh
hhhhh và PMTpro đã bày tỏ cảm xúc.
PMTpro 
  • PMTpro (Smd)  [Off]
  • Phù.Du!
 27 thg 6 • 14:39[#4]
# MrT98 (27.06.2017 / 14:36)
Có hay ko cũng chả sao đâu.
Chỗ while() có $i đâu mà $i++
bkk711 
  • bkk711  [Off]
  • PhieuBac.Ga
 27 thg 6 • 19:49[#5]
# PMTpro (27.06.2017 / 14:39)
Chỗ while() có $i đâu mà $i++
hờ 04-ragecomic
ply 
  • ply (Smd)  [Off]
  • ? hết tâm trạng coder ....
 27 thg 6 • 20:49[#6]
sao rối à bối rối vậy?
IzeroCs 
  • IzeroCs (SV!)  [Off]
  • Chưa có bồ.
 28 thg 6 • 00:11[#7]
# PMTpro (27.06.2017 / 13:44)
Mà google k thấy "\" code của T lại có "\"
Có để nếu sử dụng trong namspace không bị lỗi không tìm thấy class.
PMTpro đã bày tỏ cảm xúc.
PMTpro 
  • PMTpro (Smd)  [Off]
  • Phù.Du!
 28 thg 6 • 07:01[#8]
# IzeroCs (28.06.2017 / 00:11)
Có để nếu sử dụng trong namspace không bị lỗi không tìm thấy class.
MrT98MrT98 ảnh nói gì vại.... 04-ragecomic
MrT98MrT98
MrT98 đã bày tỏ cảm xúc.
MrT98 
  • MrT98 (SV!)  [Off]
  • Tester Tester....
 28 thg 6 • 07:05[#9]
# PMTpro (28.06.2017 / 07:01)
MrT98MrT98 ảnh nói gì vại.... 04-ragecomic
ko hiểu à???
PMTpro 
  • PMTpro (Smd)  [Off]
  • Phù.Du!
 28 thg 6 • 07:06[#10]
# MrT98 (28.06.2017 / 07:05)
ko hiểu à???
Gọn quá k thông 06-ovi
MrT98MrT98
MrT98 đã bày tỏ cảm xúc.
355 lượt xem và 11 bình luận.
1 2 >>