मुझे लगता है कि आपकी संग्रहीत प्रक्रिया का पहला तर्क VARCHAR है, इसलिए पहली समस्या यह है कि आप $q
पास कर रहे हैं क्वेरी में उद्धरण के बिना चर। यह इस तरह होना चाहिए:
$db->multi_query("CALL mst2('$q', @eset, @leng); SELECT @eset as eset; SELECT @leng as length");
साथ ही, आपको दो सेलेक्ट कॉल करने की आवश्यकता नहीं है, इसे केवल एक बार करें:
SELECT @eset AS eset, @leng AS leng;
कहने की जरूरत नहीं है कि उपयोगकर्ता इनपुट पर कभी भी भरोसा नहीं किया जाना चाहिए। आपको तैयार बयानों का उपयोग करना चाहिए:
if (($stmt = $db->prepare("CALL mst2(?, @eset, @leng)"))) {
$stmt->bind_param("s", $q);
$stmt->execute();
$stmt->close();
if (($res = $db->query("SELECT @eset AS eset, @leng AS leng"))) {
list($eset, $leng) = $res->fetch_array();
$result = $eset.$length;
echo $result;
$res->free();
}
}