यहां कई चीजें गलत हैं, लेकिन सबसे बड़ी बात यह है कि आप क्वेरी पैरामीटर का उपयोग नहीं कर रहे हैं।
नहीं addslashes
का उपयोग करें . यदि आप स्वयं को इसका उपयोग करते हुए पाते हैं, तो आपको सोचना चाहिए "ओह, मुझे क्वेरी ठीक करने की आवश्यकता है इसलिए मैं इसके बजाय पैरामीटर का उपयोग करता हूं"।
इस मामले में, आपको कुछ इस तरह लिखना चाहिए:
$sth = $pdo->prepare('SELECT replace_value(?, ?, ?)');
$sth->execute(array('protect\classes\Router', $tmp, 'serialized_classes'));
आपने यह उल्लेख नहीं किया है कि आप जिस डेटा प्रकार के तर्क को क्रमबद्ध डेटा पास करते हैं उसका डेटा प्रकार क्या है। उपरोक्त केवल तभी काम करेगा जब यह text
हो या varchar
या समान।
अगर यह bytea
है जैसे यह क्रमबद्ध ऑब्जेक्ट डेटा के लिए होना चाहिए, आपको PHP को बताना होगा कि पैरामीटर एक बाइनरी फ़ील्ड है:
$sth = $pdo->prepare('SELECT replace_value(:router, :serialbytes, :mode)');
$sth->bindParam(':router', 'protect\classes\Router');
$sth->bindParam(':mode', 'serialized_classes');
$sth->bindParam(':serialbytes', $tmp, PDO::PARAM_LOB);
$sth->execute();
PDO::PARAM_LOB
. के उपयोग पर ध्यान दें पीडीओ को यह बताने के लिए कि $tmp
PostgreSQL को bytea
. के रूप में पास करने के लिए बाइनरी डेटा शामिल है ।
('protect\classes\Router'
. जैसे स्थिरांक डालना ठीक है सीधे आपके प्रश्नों में, बीटीडब्ल्यू, जब तक आप उन्हें कभी भी चर बनने पर पैरा में विभाजित करते हैं। मैंने ज्यादातर उन्हें अलग कर दिया क्योंकि मुझे इस तरह की क्वेरी में यह अधिक पठनीय लगता है।)