2013-01-02 15 views
5

पीडीओ का उपयोग करते समय, मैं परम का चयन करने और इसे गूंजने में सक्षम होना चाहिए। हालांकि मुझे पूरा मिलता है। जब मैं वर्कबेंच का उपयोग करता हूं, तो मैं इसे ठीक देख सकता हूं।पीडीओ और MySQL संग्रहित प्रक्रिया। पेपर

क्या कोई मुझे बता सकता है कि ऐसा क्यों है?

CREATE PROCEDURE testing(OUT ret int) 
BEGIN SET ret=12; END; 

// On workbench returns '12' - Correct  
call testing(@ret); 
select @ret; 

// PHP/PDO returns NULL 
$stmt=Db()->prepare("CALL testing(@ret)"); 
$stmt->execute(); 
$param = Db()->query("SELECT @ret")->fetch(PDO::FETCH_ASSOC); 
var_dump($param); 

संपादित करें: मैं बस के बारे में आश्वस्त हैं कि इस विंडोज के साथ एक विशिष्ट समस्या हो सकती है था इसलिए मैं अपने यूनिक्स सर्वर के लिए इस उदाहरण अपलोड की गई और बिल्कुल वैसा ही परिणाम शून्य मिलता है।

+0

आप त्रुटियों के लिए कैसे की जाँच करें और वे क्या कहते http://php.net/manual/en/pdo.error-handling.php – Pablo

+0

पाब्लो, हाँ, मैं के लिए जाँच की है देखना त्रुटियां और MySQL या PDO द्वारा कोई भी रिपोर्ट नहीं की जा रही है। – NaN

उत्तर

1

ऐसा लगता है कि आपको bindParam() पर कॉल याद आती है। the PHP doc examples से:

<?php 
/* Call a stored procedure with an INOUT parameter */ 
$colour = 'red'; 
$sth = $dbh->prepare('CALL puree_fruit(?)'); 
$sth->bindParam(1, $colour, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12); 
$sth->execute(); 
print("After pureeing fruit, the colour is: $colour"); 
?> 

अद्यतन

मैं MySQL हिस्सा याद किया। MySQL doesn't support इसके सी एपीआई के माध्यम से बाध्यकारी आउटपुट पैरामीटर। बग रिपोर्ट में यह कहा गया है कि आप एसक्यूएल स्तर चर का उपयोग करना होगा:

$stmt = $db->prepare("CALL sp_returns_string(@a)"); 
$stmt->execute(); 
print_r($db->query("SELECT @a")->fetchAll()); 

लेकिन यह वास्तव में आप क्या करते हैं, और यह काम नहीं करता। मैं अभी यह खुद कोशिश कर रहा हूँ।

+0

MySQL अपने सी एपीआई के माध्यम से बाध्यकारी आउटपुट पैरामीटर का समर्थन नहीं करता है। आपको SQL स्तर चर का उपयोग करना होगा: – rizon

+0

धन्यवाद रैफेल लेकिन कोई पासा नहीं। मैं वहां गया हूं और साथ ही साथ किया है लेकिन अभी भी वापस लौटा है। हालांकि उत्तर के लिए धन्यवाद। – NaN

+0

आप [दाएं] (https://bugs.php.net/bug.php?id=35935) हैं। MySQL भाग – Raffaele

0

इस

$stmt=Dbh->prepare("CALL testing(@ret)"); 
$stmt->execute(); 
$param = $stmt->fetchAll(); 
var_dump($param); 
+0

रिज़ोन, मैंने अभी भाग लिया और मुझे क्या मिलता है: 'सरणी (0) {} ' – NaN

1

मैं यहाँ http://bugs.mysql.com/bug.php?id=11638 एक बग को देखने की कोशिश करें।

कोशिश इस

insert "SELECT @someOutParameter" in your stored procedure and then use: 

    <?php 
    $stmt = $dbh->prepare("CALL SomeStoredProcedure(?, ?)"); 
    $stmt ->execute(array($someInParameter1, $someInParameter2)); 
    ?> 
+0

अरे रिज़ोन। लिंक के लिए धन्यवाद। मैं वास्तव में बस खुद को पाया और इसके माध्यम से जा रहा था। मैं आपका उदाहरण एक कोशिश दूंगा और आपको बता दूंगा लेकिन आप वास्तव में अजीब चीज जानते हैं? मेरे पास अन्य एप्लिकेशन हैं जो इन प्रक्रियाओं का उपयोग करते हैं और वे सभी अभी भी काम कर रहे हैं। मुझे नहीं पता कि यह मेरे लिए क्यों काम नहीं करेगा; मैंने MySQL या PHP को अपग्रेड नहीं किया है। – NaN

+0

रिज़ोन, यह आउटपुट है: 'मैनुअल को जांचें जो आपके सीएसटी परीक्षण (' 1 ')' के पास सही वाक्यविन्यास के लिए लाइन 1'' – NaN

+0

पर उपयोग करने के लिए सही वाक्यविन्यास के लिए है, बस जिज्ञासा से बाहर, क्या आप सक्षम थे काम करने के लिए इनमें से कोई भी मिलता है? – NaN

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