2012-12-13 13 views
8

अपरिभाषित है मैं PHP 5.3 संस्करण का उपयोग कर रहा है और मेरे कोड में mysql_real_escape_string($unescaped_string) उपयोग करने के लिए कोशिश कर रहा है, लेकिन मैं त्रुटि मिलती है:mysql_real_escape_string

Fatal error: Call to undefined function mysql_real_escape_string() 
in /var/www/engine/database.php on line 38 

मैं अभी भी हालांकि डेटाबेस से कनेक्ट कर सकते हैं। यह क्यों उपलब्ध नहीं है?

मैं PHP संस्करण 5.3 का उपयोग कर रहा हूं।

+2

कृपया हमें अपना कोड दिखाएं – GBD

+0

इसके बजाय mysql_escape_string() का प्रयास करें – jtheman

+1

@jtheman आप बेहतर फ़ंक्शन (जो सर्वर कॉन्फ़िगरेशन को खाते में लेता है) को बदतर फ़ंक्शन (केवल सरल स्ट्रिंग प्रतिस्थापित) के प्रतिस्थापन का सुझाव क्यों दे रहे हैं? – Vyktor

उत्तर

16

अद्यतनcomment में उल्लिखित, mysql_deprecated since 5.5 कर दिया गया है:

The mysql extension has been deprecated since PHP 5.5. The mysqli or PDO extension should be used instead. The deprecation has been decided in mysql_deprecation , where a discussion of the reasons behind this decision can be found.

और पीएचपी 7 में हटा दिया।


mysql_real_escape_string()MySQL function "batch" का मानक हिस्सा है और हमेशा करता है, तो विस्तार सही ढंग से भरी हुई है काम करना चाहिए।

क्या कोई अन्य mysql_ फ़ंक्शन काम करता है? (यह नहीं करना चाहिए)

है कि आप इस पंक्ति में uncommented कर रखी हैं, अपने php.ini:

extension=mysql.so 

इसके अलावा इसका इस्तेमाल करने के लिहाज से होगी mysqli या बजाय PDO (mysql_ is deprecated), वे दोनों देखभाल कर सकते हैं आप के लिए भागने का।

+1

क्षमा करें, यह सवाल मेरी गलती थी। जब मैंने sudo apt-get php5-mysql इंस्टॉल किया, तो यह असफल रहा, और मैंने सोचा कि मेरा अन्य कनेक्ट कथन ठीक से काम कर रहा था। मुझे लगता है कि आप अभी खुद को एक मुफ्त सही जवाब मिला है। – MichaelH

+0

@MichaelH आपके कोड के साथ क्या गलत है यह सोचने से पहले सिस्टम कॉन्फ़िगरेशन को पहले (अपडेट के बाद) जांचने के लिए कुछ अभ्यास लेता है। – Vyktor

+0

MySQL एक्सटेंशन [PHP 5.5 के बाद से उपलब्ध नहीं है] (https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7); इसके बजाय ext/mysqli या ext/pdo_mysql का उपयोग करें। –

1

दिलचस्प है, यहां सभी अन्य समाधान की खोज के बाद, मुझे एहसास हुआ समस्या वास्तव में php5-mysql विस्तार अभी तक स्थापित किया गया है नहीं की वजह से है - इस पर डिफ़ॉल्ट रूप से स्थापित नहीं कर रहा है एक ताजा उबंटू, न तो जब आप ताजा PHP स्थापित करते हैं। तो, मेरे लिए समाधान हो गया: PHP5-mysql विस्तार स्थापित:

sudo apt-get install php5-mysql 

इस के बाद, मैं उन बुरा mysql_ * त्रुटि नहीं हो रही थी फिर ;-)

0

MySQL विस्तार पीएचपी 5.5 के बाद से हटा दिया गया है । इसलिए mysql_real_escape_string() PHP 7 में उपलब्ध नहीं है। इसका मतलब है कि उपयोगकर्ता इनपुट सही ढंग से बच नहीं सकता है और SQL इंजेक्शन हमलों के लिए कोड को छोड़ देता है।

PHP-आधिकारिक समाधान replace ext/mysql with MySQLi, PDO या अन्य समर्थित डेटाबेस एक्सटेंशन है।

एसक्यूएल इंजेक्शन हमलों को रोकने के लिए, डेटाबेस से बात करते समय prepared statements and parameterized queries का उपयोग करने की अनुशंसा की जाती है।

+0

अद्यतन किया है जो कोई डेटाबेस एपीआई उपलब्ध है (mysql, mysqli, PDO, जो कुछ भी) सही ढंग से मूल्यों से बचने के लिए या सीधे डेटाबेस के तैयार कथन API का उपयोग करने के लिए एक फ़ंक्शन है (बहुत बेहतर दृष्टिकोण शुरुआत के लिए)। यदि 'real_escape_string' या समकक्ष उपलब्ध नहीं है जिसका अर्थ है कि संपूर्ण डेटाबेस API उपलब्ध नहीं है और आपको वैसे भी बहुत बड़ी समस्याएं हैं। इस समारोह को खराब रूप से सुधारने की आवश्यकता नहीं होनी चाहिए। गंभीर रूप से आप किसी एन्कोडिंग चिंताओं को लागू नहीं कर रहे हैं, जो अभी भी आपको कुछ मल्टी-बाइट एन्कोडिंग में इंजेक्शन के लिए खुलता है। – deceze

+0

@deceze: "MySQL एक्सटेंशन बहिष्कृत" भाग पर फ़ोकस करने के लिए उत्तर बदल दिया गया है। हटाया गया फ़ंक्शन जो 'mysql_real_escape_string() 'की नकल करता है। –

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