2012-06-11 18 views
7

पर MySQL डेटाबेस से कनेक्ट करने के सबसे प्रभावी तरीके एक ही परिणाम प्राप्त करने के कई तरीके हैं, जहां मैं सोच रहा हूं कि एक MySQL कनेक्शन प्रारंभ करने का सबसे प्रभावी तरीका कौन सा है।एकाधिक फ़ाइलों (PHP)

नोट: हाल ही में मैंने PHP दस्तावेज़ में भी खोज की है कि mysql_connect अब डिस्कार्ज किया गया है, मेरे सभी कोड वर्तमान में mysql_connect का उपयोग कर रहे हैं। स्विच करने के लिए पर्याप्त कारण है?

क्या मुझे क्या करना कोशिश कर रहा हूँ है:

  1. एक database.php पैदा करते हैं।
  2. डेटाबेस से कनेक्ट होने वाले PHP पेजों में इस फ़ाइल को शामिल किया जाएगा ताकि मुझे डेटाबेस से कनेक्ट करने के लिए बहुत सारे कोड लिखने की आवश्यकता न हो।

तो सबसे डेटाबेस होने के लिए यह डेटाबेस.एफपी क्या करना चाहिए।

1. $con = mysql_connect("etc"...) 
    mysql_select_db("databse") 

// यहां से मैं इस फ़ाइल को शामिल कर सकता हूं और प्रश्न पूछना शुरू कर सकता हूं। - काम करता है लेकिन मुझे यकीन नहीं है कि यह सबसे अच्छा तरीका है या नहीं।

2. //database.php 
    $mysqli = new mysqli('localhost', 'user', 'pwd', 'database'); 
    // in other files 
    $mysqli->query("SELECT ...") 
  1. या मैं लगातार कनेक्शन का उपयोग करना चाहिए? (साइट काफी डेटाबेस से भारी है, और पेज पीढ़ी का एक बहुत होने जा रहे हैं, कोई 100 से अधिक उपयोगकर्ता एक साथ में लॉग इन)

अग्रिम

+0

आप जो कर रहे हैं वह ठीक दिखता है। – bumperbox

+1

कनेक्शन पुन: उपयोग किए जाते हैं यदि कनेक्शन के लिए समान प्रमाण-पत्रों का उपयोग किया जाता है, तो चिंता करने के लिए बहुत कुछ नहीं; लेकिन हाँ, आप जितनी जल्दी हो सके mysql से रास्ता स्थानांतरित करने के लिए प्रोत्साहित किया। http://php.net/manual/en/mysqlinfo.api.choosing.php –

+0

@ बम्परबॉक्स यह मैनुअल में कहता है कि "इसे PHP 5.5.0 के रूप में हटा दिया गया है और भविष्य में हटा दिया जाएगा" तो यह निर्भर करता है भविष्य में php का उपयोग कैसे कर रहे हैं यदि आपको हटा दिया गया है और आपके होस्ट के पास केवल php –

उत्तर

6

मैंने आज अपने कोड में पीडीओ को अपने कोड में MySQL एक्सटेंशन के सभी कार्यों को बदल दिया है।

क्रम सबसे लचीला होने के लिए, अगर आप इस तरह एक सामान्य कनेक्शन के साथ "database.php" बनाना चाहिए:

<?php 
$pdo = new PDO('mysql:host=example.com;dbname=database;charset=UTF-8', 
       'username', 
       'password'); 
फिर अन्य पेज में

, require() का उपयोग इस तरह फ़ाइल शामिल करने के लिए:

<?php 
require('database.php'); 

// Example with 'query' 
$queriedSQL = $pdo->query('SELECT * FROM table'); 

// Example with 'prepare' 
$preparedSQL = $pdo->prepare('SELECT * FROM other_table WHERE id = ?'); 
$preparedSQL->setFetchMode(PDO::FETCH_ASSOC); 

while($result = $queriedSQL->fetch(PDO::FETCH_ASSOC)) { 
    $preparedSQL->execute(array($result['id'])); 
    $preparedSQLResult = $preparedSQL->fetch(); 
    // Process code here 
} 

दूसरी तरफ, आप मूल के रूप में "index.php" बना सकते हैं और फिर संबंधित फ़ाइल (जैसे सभी सीएमएस सिस्टम, वर्डप्रेस, आदि) को शामिल करने के लिए URL या $_GET[] को संसाधित कर सकते हैं।

इस तरह से कुछ डेटा (मेजबान, उपयोगकर्ता नाम, पासवर्ड और/या डेटाबेस नाम) बदलते समय आप कोड की मात्रा की मात्रा से बच सकते हैं।

लगातार कनेक्शन के बारे में, PHP इसे अनुमति देता है, लेकिन here में आप पाएंगे जैसे कमियां हैं।

+0

यहां: $ परिणाम = $ एसक्यूएल-> लाने (पीडीओ :: FETCH_ASSOC) क्या आपका मतलब $ तैयार है एसक्यूएल-> लाने? मुझे कहीं भी $ SQL घोषित नहीं किया गया है – 40Plot

+0

@stackplasm क्षमा करें, मेरा मतलब $ queriedSQL है, जब मैं उदाहरण उदाहरण जोड़ रहा हूं तो वे परिवर्तनीय नाम बदलना भूल गया। मैंने अभी संपादित किया है। –

3

पहली बात आपको क्या करना चाहिए धन्यवाद एक mysql.config.php फ़ाइल बना रहा है।

<?php 
define('MYSQL_HOST',''); 
define('MYSQL_USER',''); 
define('MYSQL_PASSWORD',''); 
define('MYSQL_DATABASE',''); 
?> 

दूसरी बात आपको क्या करना चाहिए एक mysql.class.php फ़ाइल जो डेटाबेस कनेक्शन विवरण (इस व्यवहार की नकल) के सभी संभालती पैदा करते हैं। NumRows फ़ंक्शन जैसी कार्यक्षमता बढ़ाने के लिए बस नए फ़ंक्शंस जोड़ें।

<?php 
require_once 'mysql.config.php'; 
class MySQL { 
private $query; 
private $result; 
public function __construct($host = MYSQL_HOST, $user = MYSQL_USER, $password = MYSQL_PASSWORD, $database = MYSQL_DATABASE) { 
    if (!$con = mysql_connect($host,$user,$password)) { 
     throw new Exception('Error connecting to the server'); 
    } 
    if (!mysql_select_db($database,$con)) { 
     throw new Exception('Error selecting database'); 
    } 
} 
public function query($query) { 
    $this->query = $query; 
    if (!$this->result = mysql_query($query)) { 
     throw new Exception('Error performing query '.$query); 
    } 
} 
public function numRows() { 
    if ($this->result) return mysql_num_rows($this->result); 
    return false; 
} 
} 
?> 

अंतिम चीज़ जो आपको करने की ज़रूरत है वह इन फ़ाइलों को आपके ऐप में उपयोग करना है।

<?php 
require_once 'mysql.class.php'; 
try { 
    $db = new MySQL(); 
    $db->query('SELECT username FROM login WHERE username = "'.$USERNAME.'" LIMIT 1'); 
    if ($db->numRows() == 1) print_json(array('user'=>true),true); 
    else print_json(array('user'=>false),true); 
} catch(Exception $e) { 
    echo $e->getMessage(); 
    exit(); 
} 
?> 
+4

इस बात के पक्ष में किसी व्यक्ति के लिए समाधान के रूप में समाधान नहीं है। यदि आप एकाधिक फ़ाइलों में उपयोग के लिए ऑब्जेक्ट बनाने जा रहे हैं, तो उस ऑब्जेक्ट को पीडीओ (या mysqli) में हुक करें लेकिन mysql फ़ंक्शन को प्रोत्साहित न करें। उपरोक्त आपके उत्तर में बहुत ही सरल परिवर्तन यह ठीक करेगा! – Robbie

+0

सहमत हुए। मैंने अभी तक पीडीओ या माइस्क्ली के बारे में नहीं सीखा है, लेकिन यदि आप mysql का उपयोग करने का निर्णय लेते हैं तो यह ऑब्जेक्ट उन्मुख फ्रेमवर्क का उपयोग करने में आसान तरीका है। –

1

साइट डेटाबेस भारी है, तो मैं आपको डेटाबेस कनेक्शन के लिए पीडीओ का उपयोग करने का सुझाव दूंगा। PHP-MySQL ट्रैफ़िक को कम करने के लिए, एकाधिक प्रश्नों के लिए लेनदेन का भी उपयोग करें। यहाँ

विवरण: http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html

1

पीएचपी प्रोग्रामिंग भाषा के संबंध में, MySQL पुराने डेटाबेस ड्राइवर है, और mysqli बेहतर ड्राइवर है। MySQLi MySQL 5 की नई विशेषताओं का लाभ उठाता है। PHP से लिफ्ट वर्बैटिम।शुद्ध साइट:

  • वस्तु उन्मुख इंटरफ़ेस तैयार बयान के लिए
  • समर्थन एकाधिक बयान के लिए
  • समर्थन
  • लेन-देन के लिए
  • समर्थन
  • बढ़ी डिबगिंग क्षमताओं
  • एंबेडेड सर्वर समर्थन आप विकल्प नहीं है अनिवार्य रूप से mysql, mysqli, या पीडीओ का उपयोग करने के लिए।

यदि आप बस एक रिलेशनल डेटाबेस की तलाश में हैं, तो आपको MySQL से आगे की आवश्यकता नहीं है, हालांकि कई विकल्प उपलब्ध हैं।

0

उत्तर: "चाहिए मैं लगातार कनेक्शन का उपयोग"

सं अपने डेटाबेस "भारी" है, तो सतत् कनेक्शन वास्तव में मदद नहीं करेगा - वास्तव में, वे PHP स्क्रिप्ट है कि एक लंबे समय के लिए खुला रहने के साथ में बाधा हो सकती है डेटा प्रोसेस करते समय। लगातार कनेक्शन केवल कुछ परिस्थितियों में डेटाबेस से कनेक्ट करने के लिए समय बढ़ाते हैं। आप प्रत्येक एमएस प्रति स्क्रिप्ट रन को सहेजने में सक्षम हो सकते हैं, लेकिन जब तक आप ध्यान से लिखते हैं तो आप ताले या लेन-देन को रिलीज़ करने के लिए अधिक रनिंग फ़ंक्शन खो देंगे। तो जब तक आपके पास बहुत कम, बहुत छोटी स्क्रिप्ट नहीं होतीं, जो छोटे, तेज डीबी कनेक्शन प्राप्त करती हैं और फिर आगे बढ़ती हैं, या डीबी सर्वर वेब सर्वर से लंबा रास्ता है, इस बिंदु पर पसीना न करें।

पीडीओ को अन्य उत्तरों में सुझाव दिया गया है, इसलिए मैंने उन्हें चिह्नित किया है क्योंकि यह आपके लिए सबसे अच्छा होगा।

संबंधित मुद्दे