ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: Mysql connection management  (อ่าน 4182 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
MonkyDLuffy
ก๊วนเสียว
*

พลังน้ำใจ: 2
ออฟไลน์ ออฟไลน์

กระทู้: 376



ดูรายละเอียด
« เมื่อ: 14 พฤศจิกายน 2006, 17:15:59 »

คือไม่รู้ว่าจะเอาหัวข้อนี้ไปไว้ที่ ห้องไหนดี เลยขอ หย่อนไว้ตรงนี้แล้วกันนะครับ เผื่อ ผู้รู้จะแวะเวียนมา

คือผมอยากทราบน่ะครับว่า php และ mysql เราจะมีวิธี ที่จะทำให้ user ที่เข้ามาแล้วทำการ connect กับ database เรา

เพียงแค่ครั้งเดียวมั้ยครับ แล้วให้เค้าใช้ connection นั้นจนกว่าเค้าจะออกจากเวบเรา ยกตัวอย่างเช่น

ผมลอกอินเข้ามาใน เวบ ไทยเสียวบอร์ด มันก็จะทำการ ติดต่อ DB ใช่ม่ะครับ แล้วผมก็ click เข้าไปที่

ห้อง Cafe ซึ่ง DB จะต้องไป SELECT เอา content ของหระทู้ต่างๆในห้อง cafe มาโชว์ใช่ม่ะครับ ซึ่งตรงนี้ ถ้ามันเปลี่ยนหน้าใหม่ เราจะต้องทำการ connect DB อีกครั้งหนึ่งเพื่อ select ข้อมูล

มันดูเปลือง transaction มากเลยอ่ะครับ ผมคิดว่า คุณพิซซ่า ต้องรู้แน่ๆเลยว่าต้องทำยัง ยังไงช่วยทำให้ผมฉลาดขึ้นหน่อยครับ  :cry:  :cry:  :cry:

ปล. ถ้าท่านอื่นที่รู้ก็ ช่วยส่งเสริมหน่อยนะครับ  Smiley  Smiley
บันทึกการเข้า
ก็องโต้
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 83
ออฟไลน์ ออฟไลน์

กระทู้: 1,682



ดูรายละเอียด
« ตอบ #1 เมื่อ: 14 พฤศจิกายน 2006, 17:40:32 »

คือจะเอาไปพัฒนาเองหรือเปล่าครับ หรือเอา concept ลองดู code ข้างล่างดูนะครับเผื่อได้ไอเดีย

<?php

/* check login script, included in db_connect.php. */

session_start();

if (!isset($_SESSION['username']) || !isset($_SESSION['password'])) {
   $logged_in = 0;
   return;
} else {

   // remember, $_SESSION['password'] will be encrypted.

   if(!get_magic_quotes_gpc()) {
      $_SESSION['username'] = addslashes($_SESSION['username']);
   }


   // addslashes to session username before using in a query.
   $pass = $db_object->query("SELECT password FROM users WHERE username = '".$_SESSION['username']."'");

   if(DB::isError($pass) || $pass->numRows() != 1) {
      $logged_in = 0;
      unset($_SESSION['username']);
      unset($_SESSION['password']);
      // kill incorrect session variables.
   }

   $db_pass = $pass->fetchRow();

   // now we have encrypted pass from DB in
   //$db_pass['password'], stripslashes() just incase:

   $db_pass['password'] = stripslashes($db_pass['password']);
   $_SESSION['password'] = stripslashes($_SESSION['password']);



   //compare:



   if($_SESSION['password'] == $db_pass['password']) {
      // valid password for username
      $logged_in = 1; // they have correct info
               // in session variables.
   } else {
      $logged_in = 0;
      unset($_SESSION['username']);
      unset($_SESSION['password']);
      // kill incorrect session variables.
   }
}


// clean up
unset($db_pass['password']);

$_SESSION['username'] = stripslashes($_SESSION['username']);

?>
บันทึกการเข้า
thai1
ก๊วนเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 263



ดูรายละเอียด
« ตอบ #2 เมื่อ: 14 พฤศจิกายน 2006, 19:28:30 »

ถ้าอยากให้ Select ครั้งเดียวละก็เขียน Select Join table กันแหลก ข้อดีก็คือดึงครั้งเดียว แต่ก็เปลืองแรมหน่อย แต่เขียนเป็นปกติที่ชาวบ้านเค้าทำกันดีกว่าคือ เมื่อเปิดใช้งาน connection แล้วเสร็จก็ควรปิดด้วยแต่ละครั้ง มันก็จะไม่เปลืองแล้วครับ เพราะมันจะ clear ตัวเองเมื่อปิด connection แล้วก็ใช้คำสั่ง freeram อีกที
บันทึกการเข้า

MonkyDLuffy
ก๊วนเสียว
*

พลังน้ำใจ: 2
ออฟไลน์ ออฟไลน์

กระทู้: 376



ดูรายละเอียด
« ตอบ #3 เมื่อ: 14 พฤศจิกายน 2006, 23:44:03 »

ขอบคุณมากครับ แต่ไม่ทราบว่า สคริป ที่เป็นตัวอย่างนี้ คือมันจะเช็ค connection ก่อนรึป่าวครับ ทำไมมันไม่มีคำสั่ง พวก

mysql_select_db() อะไรเลยอ่ะครับ หรือว่านี่เป็นแค่ส่วนหนึ่ง แล้วให้มันไปเรียกคลาส จาก อีก page นึงอ่ะครับ

สรุป ถ้าผมเปิดและปิด connection ภายในหน้านั้น แล้วไปเปิดใหม่ในอีกหน้าหนึ่ง มันจะไม่ทำให้ performance ตกจริงเหรอครับ

ส่วนตัวจากที่เคยทำงาน ขนาด oracle โดย connect แบบ เปิดปิด ยังอืดลงเลยอ่ะครับ

อยากให้มาฟันธงทีครับ  Tongue
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
พิมพ์