1
即使命名參數,使用「bindParam」也要求我知道調用存儲過程時應該使用的順序參數。有沒有辦法用PDO獲取存儲過程的參數及其順序?
是否有任何任何方式:
調用存儲過程和busilding的聲明中,不必知道參數
的順序,或者得到的名稱和順序從聲明或PDO對象存儲proc所需的參數?
即使命名參數,使用「bindParam」也要求我知道調用存儲過程時應該使用的順序參數。有沒有辦法用PDO獲取存儲過程的參數及其順序?
是否有任何任何方式:
調用存儲過程和busilding的聲明中,不必知道參數
的順序,或者得到的名稱和順序從聲明或PDO對象存儲proc所需的參數?
爲什麼不按名稱綁定參數?
$stmt = $pdo->prepare("SELECT * FROM mytable WHERE n = :num AND z = :zone");
$stmt->execute(array("zone" => $zone, "num" => $num));
順便說一下,我更喜歡簡單地通過傳遞一個數組來傳遞參數execute()。沒有必要使用bindParam(),並且沒有好處。有參數類型說明符,但是如果您閱讀PDO代碼,這些代碼將被忽略,至少在PDO_MySQL驅動程序中。
重新評論:好的,現在我明白你的問題了。
不,沒有辦法查詢一個MySQL存儲過程來知道它期望什麼參數,或者你將如何在proc中使用它們。你必須至少知道你自己的代碼。
因爲訂單很重要。如果存儲過程被定義爲具有輸入變量'SomeProc(一個varchar(2),兩個varhcar(2))',即使我使用bindParams按名稱綁定(例如'bindParam(「one」,...) ,如果它們放入準備語句的順序與它們在存儲過程中出現的順序不同,它們將作爲錯誤參數發送。在C#中(使用SqlCommand),您不需要知道參數的順序,SqlCommand對象自己處理它。 – 2013-02-09 20:52:54