您好,登錄后才能下訂單哦!
這篇文章主要介紹“php+mysql如何使用存儲過程”,在日常操作中,相信很多人在php+mysql如何使用存儲過程問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”php+mysql如何使用存儲過程”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
一、MySQL存儲過程
MySQL的存儲過程是一段預編譯的SQL語句集合,可以用于執(zhí)行一些特定的業(yè)務邏輯。相對于在應用層編寫類似的業(yè)務邏輯,使用存儲過程可以將這些邏輯移至數(shù)據(jù)庫層面,節(jié)省了網(wǎng)絡傳輸?shù)臅r間,提高了性能。下面是一段簡單的MySQL存儲過程:
CREATE PROCEDURE `my_proc`(IN `p_id` INT, OUT `p_name` VARCHAR(20)) BEGIN SELECT `name` INTO `p_name` FROM `users` WHERE `id` = `p_id`; END
這段存儲過程接受一個整型參數(shù)p_id
,并將對應用戶的姓名賦值給p_name
輸出參數(shù)。在應用層調(diào)用該存儲過程時,只需要傳遞參數(shù)p_id
,即可獲得對應用戶的姓名。使用存儲過程的好處在于,下次調(diào)用該存儲過程時,MySQL引擎已經(jīng)將該過程編譯為機器碼,無需再次解析SQL語句,因此執(zhí)行效率更高。
二、PHP調(diào)用MySQL存儲過程
在PHP開發(fā)中,使用存儲過程可以大大減少數(shù)據(jù)庫操作的時間。下面是調(diào)用上述MySQL存儲過程的PHP代碼:
<?php // 連接MySQL數(shù)據(jù)庫 $db = new mysqli('localhost', 'user', 'password', 'test'); if ($db->connect_errno) { die('Connect Error:' . $db->connect_error); } // 準備存儲過程的參數(shù)和調(diào)用語句 $id = 1; $p_name = ''; $sql = "CALL my_proc($id, @p_name)"; // 執(zhí)行調(diào)用語句 if ($db->multi_query($sql)) { // 獲取輸出參數(shù) $db->next_result(); $result = $db->query("SELECT @p_name AS `name`"); $row = $result->fetch_assoc(); $p_name = $row['name']; // 輸出查詢結(jié)果 echo "User $id's name is $p_name"; } else { echo "Call Procedure Error:" . $db->error; } // 關閉數(shù)據(jù)庫連接 $db->close(); ?>
在這段PHP代碼中,首先連接MySQL數(shù)據(jù)庫,隨后準備存儲過程的輸入?yún)?shù)和調(diào)用語句。由于調(diào)用存儲過程產(chǎn)生的查詢結(jié)果是通過OUT參數(shù)輸出的,因此需要執(zhí)行多個SQL語句才能獲取查詢結(jié)果:首先執(zhí)行調(diào)用語句,隨后執(zhí)行SELECT語句,最后獲取輸出參數(shù)p_name
。調(diào)用結(jié)束后,關閉數(shù)據(jù)庫連接即可。
到此,關于“php+mysql如何使用存儲過程”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。