के रूप में कक्षा के अंदर डेटाबेस तालिका बनाना, मैं न केवल पठनीयता के लिए बल्कि मेरे द्वारा काम कर रहे प्रोजेक्ट के अनुकूलन के लिए भी अपने कोड को छोटा करने की चाल करने की कोशिश कर रहा हूं।फ़ंक्शन
मैंने एक क्लास बनाया है जो डेटाबेस से जुड़ता है लेकिन उपयोग करने के लिए एक फ़ंक्शन के साथ संघर्ष कर रहा हूं जो कॉलम के साथ एक टेबल बनाएगा।
वर्ग इस तरह दिखता है अब तक:
class DataBase {
private $link;
private $host, $username, $password, $database;
public function __construct($host, $username, $password, $database){
$this->host = $host;
$this->username = $username;
$this->password = $password;
$this->database = $database;
$this->link = mysql_connect($this->host, $this->username, $this->password)
OR die("There was a problem connecting to the database.");
mysql_select_db($this->database, $this->link)
OR die("There was a problem selecting the database.");
return true;
}
public function query($query) {
$result = mysql_query($query);
if (!$result) die('Invalid query: ' . mysql_error());
return $result;
}
public function __destruct() {
mysql_close($this->link)
OR die("There was a problem disconnecting from the database.");
}
}
आप देख सकते हैं क्वेरी की पद्धति पहले से ही जोड़ा गया है। कैसे अपनी दौड़ है का एक उदाहरण:
$db = new DataBase('localhost',$user,$pass,$name);
$db->query('SELECT * FROM table WHERE id="0"');
किसी को भी संभव मुझे डालने तालिका जोड़ने के लिए समारोह जोड़ने के लिए कुछ कोड भेजा सकता है? मैं इस की कोशिश की है:
public function create_table($t_data) {
$result = $t_data;
if (!$result) die('Invalid query: ' . mysql_error());
return $result;
}
उपयोग:
$t_data = 'CREATE TABLE log_users(
uid VARCHAR(1024) NOT NULL,
username VARCHAR(33) NOT NULL,
password VARCHAR(18) NOT NULL,
admin VARCHAR(1) DEFAULT 0,
key VARCHAR(18) NOT NULL,
constant VARCHAR(1) DEFAULT 0)';
$db->create_table($t_data);
अरे, अपने वर्तमान 'query' समारोह अत्यंत एक SQL इंजेक्शन हमले के लिए अतिसंवेदनशील है, तो आप स्वच्छ या आपकी क्वेरी तो एक हमलावर आसानी से नष्ट करने या अपने डेटाबेस समझौता कर सकता है तैयार नहीं है। आप 'mysql' लाइब्रेरी का भी उपयोग कर रहे हैं जिसे वर्षों से बहिष्कृत कर दिया गया है, आपको कम से कम' mysqli' या बेहतर अभी तक 'पीडीओ' का उपयोग करना चाहिए। पीडीओ आपको बहुत सारे सिरदर्द बचाएगा और मैंने डीबी कक्षा के लिए यहां एक बुनियादी ढांचा लिखा है जो एसक्यूएल इंजेक्शन हमलों को प्रबंधित करता है https://github.com/alexmk92/ASFramework/blob/master/app/core/models/Database.php – Alex
@ एलेक्स बहुत बहुत धन्यवाद! वास्तव में मुझे क्या चाहिए! मैं इसके लिए स्रोत कोड में एक लिंक रखूंगा! –
प्रश्न, मैं इसका उपयोग कैसे करूं? मैं SQLi के लिए उपयोग नहीं किया जाता है। यह होगा: $ डीबी = नया डेटाबेस(); $ डीबी-> लाने ('तालिका से चुनें'); और मैं इनके साथ एक टेबल कैसे बनाऊंगा? इसके अलावा, धन्यवाद! @Alex –