मुझे MySQL वर्कबेंच के साथ कई संग्रहित प्रक्रियाएं मिली हैं। जब वे MySQL वर्कबेंच का उपयोग अपने परीक्षण डीबी में डालते हैं तो वे ठीक काम करते हैं।PHP से mySQL में संग्रहीत प्रक्रियाओं को कैसे सम्मिलित/बनाएँ?
अब मैं तैनाती के लिए डीबी निर्माण स्क्रिप्ट तैयार कर रहा हूं, और यह केवल मुझे परेशानी दे रहा है। जब मैं कमांड लाइन/mysql खोल का उपयोग करता हूं, तो स्क्रिप्ट पूरी तरह से अच्छी तरह से काम करती है। यह केवल तब होता है जब मैं स्क्रिप्ट निष्पादित करने के लिए PHP mysql (i) इंटरफ़ेस का उपयोग करता हूं - यह विफल रहता है। टिप्पणी के बीना।
मैं प्रक्रिया निर्माण स्क्रिप्ट का उपयोग करता हूं क्योंकि MySQL वर्कबेंच मेरे लिए उत्पन्न करता है; कि है, यह इस पद्धति है:
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL';
स्क्रिप्ट के शुरू में
, तो प्रत्येक प्रक्रिया के लिए दोहरा:
DELIMITER $$
USE `dbname`$$
CREATE PROCEDURE `procname`(IN inputparameters)
BEGIN
... प्रक्रिया यहाँ
;
END$$
DELIMITER ;
यह स्क्रिप्ट चला जाता है MySQL वर्कबेंच से चलने पर ठीक काम करता है। अगर मैं mysql कमांडलाइन से भी कोशिश करता हूं तो यह भी ठीक चलता है। लेकिन जब मैं इसे PHP mysqli इंटरफ़ेस (mysqli_multi_query के साथ निष्पादित करता हूं) के माध्यम से इसे निष्पादित करता हूं, तो यह कुछ भी पूरा करने में विफल रहता है, जो डीबी बनाने और पॉप्युलेट करने वाली अन्य स्क्रिप्ट के लिए ठीक काम करता है)। इंटरफ़ेस पर कोई त्रुटि नहीं आई है, कोई परिणाम नहीं (!)। मुझे जो भी मिलता है वह "झूठा" है, और यही वह है। त्रुटि कोड 0 पर है, कोई त्रुटि संदेश नहीं है।
यह मेरे लिए एक बड़ा डब्ल्यूटीएफ है, और मुझे उम्मीद है कि आप मुझे सही दिशा में इंगित कर सकते हैं - मैं इसे कैसे ठीक कर सकता हूं और PHP से प्रक्रियाओं को स्थापित कर सकता हूं?
पीएस: रूट/व्यवस्थापक पहुंच दी जाती है और सत्यापित की जाती है (आखिरकार, मैंने डीबी को उसी कनेक्शन के साथ बनाया है, उपयोगकर्ताओं को बनाया है, टेबल डाला है और इसी तरह)।
उपयोग 'dbname' को हटाने का प्रयास करें। Mysqli_query कमांड का उपयोग करते समय भी चलाने का प्रयास करें। – Knubo
मैंने उस यूईईई स्टेटमेंट को हटा दिया, कोई प्रभाव नहीं। mysqli_query भी विफल रहता है - और इस मामले में यह स्पष्ट है कि क्यों: स्ट्रिंग में कई कथन होते हैं, इसलिए यदि यह * सही तरीके से प्रदर्शन कर रहा था, तो यह कई परिणाम लौटाएगा - जो mysqli_query संभाल नहीं करता है। - अन्य स्क्रिप्ट के लिए, mysqli_multi_query पूरी तरह से ठीक काम करता है, प्रत्येक कथन के लिए एक परिणाम पंक्ति लौटाता है। (सफलता पर खाली पंक्तियां, नोट: 1051 लाइनें चेतावनी दिखाने के लिए प्रतिक्रिया के रूप में; - जैसा कि अपेक्षित है)। – foo
मैं करीब आ रहा हूं - कोई समाधान नहीं, लेकिन निदान। लगता है कि DELIMITER क्लाइंट-साइड (!) लागू किया गया है। – foo