2012-04-18 9 views
7

मैं एक php restful API बना रहा हूं और वर्तमान में मेरे पास प्रत्येक फ़ंक्शन में डेटाबेस कनेक्शन जानकारी है।क्या मुझे डेटाबेस का उपयोग करने वाले प्रत्येक फ़ंक्शन में एक php mysql कनेक्शन चाहिए?

//Connect To Database 
    $hostname=host; 
    $username=username; 
    $password=password; 
    $dbname=dbname; 

    mysql_connect($hostname, $username, $password) OR DIE('Unable to connect to database! Please try again later.'); 
    mysql_select_db($dbname); 
mysql_query($sqlApiAccess) or die('Error, insert query failed'); 

ऐसा करने का सबसे अच्छा तरीका क्या है, क्या मेरे पास प्रति php फ़ाइल में एक डेटाबेस कनेक्शन हो सकता है? या मुझे इसे प्रति फ़ंक्शन करने की आवश्यकता है जो डेटाबेस का उपयोग करता है।

+0

सिर्फ एक कारण है कि आपको लगता है और अधिक की आवश्यकता है? – Vytautas

+1

वैसे, 'पीडीओ' लाइब्रेरी पर एक नज़र डालें। यह डीबी के साथ काम करने के लिए अच्छा ऑब्जेक्ट उन्मुख तरीका प्रदान करता है (जैसा कि 'mysql' और' mysqli' 'के विपरीत है; यह भी तैयार बयान के लिए अनुमति देता है (जबकि 'mysql' आईआईआरसी इनका समर्थन नहीं करता है, सभी डेवलपर्स को डेवलपर को छोड़कर)। – penartur

+0

मैं PHP के लिए नया हूं और डीबी कनेक्शन पर आवश्यकताओं पर निश्चित नहीं था। मैं पीडीओ लाइब्रेरी – Moltra

उत्तर

12

एक config.php कोड बनाएं और जोड़ें: किसी भी फाइल आप mysql का उपयोग करना चाहते में

config.php:

$hostname=host; 
$username=username; 
$password=password; 
$dbname=dbname; 

mysql_connect($hostname, $username, $password) OR DIE('Unable to connect to database! Please try again later.'); 
mysql_select_db($dbname); 

फिर, निम्नलिखित जोड़ें:

script2.php

<?php 
require_once 'config.php'; 

mysql_query($sqlApiAccess) or die('Error, insert query failed'); 
?> 
+1

पर भी देखेंगे; पेशेवरों से संदेश: पी अपने इनपुट को स्वच्छ करना सुनिश्चित करें;) – Menztrual

+0

यह बहुत अच्छा काम करता है। मैं htmlspecialchars और mysql_real_escape_string के माध्यम से अपने सभी एपीआई पैरामीटर चलाता हूं। यह शायद एक अधिक हत्या है, लेकिन मैं अपने डीबी की रक्षा करना चाहता हूँ। – Moltra

+0

इनपुट पर html_entities() के बारे में चिंता न करें, बस आउटपुट। और इकाइयों/विशेषताओं के साथ ENT_QUOTES का उपयोग करना सुनिश्चित करें;) – Menztrual

2

प्रत्येक फ़ंक्शन में कनेक्शन बनाने की आवश्यकता नहीं है। आपको conn.php जैसे कनेक्शन फ़ाइल बनाने और कनेक्शन क्वेरी करने की आवश्यकता है।

<?php 
mysql_connect("localhost", "admin", "1admin") or die(mysql_error()); 
mysql_select_db("test") or die(mysql_error()); 
?> 
किसी भी अन्य फाइल जहां सिर्फ इस लाइन

<?php include("conn.php");?> 

इस फाइल पर लिख डेटाबेस से कनेक्ट करना चाहते में

आप किसी भी क्वेरी चलाने के लिए सक्षम हैं।

1

ऐसा करें:

$db_connection= mysql_connect($hostname, $username, $password) OR DIE('Unable to connect to database! Please try again later.'); 

और हर बार आप चाहते हैं क्वेरी करने के लिए:

mysql_query("my_query",$db_connection); 

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

और तुम DB कनेक्शन बंद करना चाहते हैं जब:

mysql_close($db_connection); 
0

क्यों आप config में कनेक्शन जानकारी और कुछ कारखाने में mysql_connect करने के लिए कॉल बाहर स्थानांतरित नहीं होगा?

उदा।

class ConnectionFactory { 
    public static MysqlConnection CreateConnection() { 
     $connection = mysql_connect(Config::$host, Config::$port etc); 
     mysql_select_db($connection, Config::$schema); 
     return $connection; 
    } 
} 

और फिर अपने कोड में

$connection = ConnectionFactory::CreateConnection(); 
mysql_query($connection, $sqlApiAccess) or die('Error, insert query failed'); 
+2

किसी ऐसे व्यक्ति के लिए जो सिर्फ यह पूछ रहा है कि उसे प्रत्येक फ़ाइल में एक ही कोड डालना है, मुझे लगता है कि एक कनेक्शन होने के बाद कारखाना कम हो गया है और यदि कुछ भी है, तो वह उसे अपने सिर को और भी खरोंच कर देगा। – Menztrual

+0

@tehlulz शायद हो सकता है। मैंने कुछ साल पहले एलन कैर के * आसान तरीका PHP को रोकने के लिए पढ़ा था, और पहले ही भूल गया था कि PHP में कितना खराब सॉफ़्टवेयर लिखा जा सकता है। – penartur

+0

सीखने के बीच एक अंतर है कि भाषा का उपयोग कैसे करें और एक पूर्ण उड़ा हुआ एप्लिकेशन लिखना: पी – Menztrual

12

एक नया डेटाबेस कनेक्शन हर बार बनाने से बचने के लिए, हम उपयोग कर सकते हैं Singleton design pattern -

हम एक डेटाबेस वर्ग को संभालने के लिए की आवश्यकता है डीबी

Database.class कनेक्शन।php

<?php 
     class Database 
     { 
      // Store the single instance of Database 
      private static $m_pInstance; 

      private $db_host='localhost'; 
      private $db_user = 'root'; 
      private $db_pass = ''; 
      private $db_name = 'databasename'; 

      // Private constructor to limit object instantiation to within the class 
      private function __construct() 
      { 
       mysql_connect($this->db_host,$this->db_user,$this->db_pass); 
       mysql_select_db($this->db_name); 
      } 

      // Getter method for creating/returning the single instance of this class 
      public static function getInstance() 
      { 
       if (!self::$m_pInstance) 
       { 
        self::$m_pInstance = new Database(); 
       } 
       return self::$m_pInstance; 
      } 

      public function query($query) 
      { 
       return mysql_query($query); 
      } 

     } 
?> 

& हम से यह कॉल कर सकते हैं अन्य फ़ाइलों

other.php

<?php 
     include 'singleton.php'; 
     $pDatabase = Database::getInstance(); 

     $result = $pDatabase->query('...'); 
?> 
+0

मैं इस पैटर्न का उपयोग कर रहा था, लेकिन कभी-कभी मुझे 'बहुत सारे डेटाबेस कनेक्शन' कहने में त्रुटि मिली .. मुझे डेटाबेस कनेक्शन को कहां बंद करना चाहिए। – ELITE

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