PHP串連Oracle錯誤ORA-24324服務控制代碼未初始化的解決方案

來源:互聯網
上載者:User

     現在,PHP與Oracle串連一般用到php_oci8.dll。

      但是,寫完PHP代碼調試的時候,我遇到了一個很古怪的問題,就是只有每一次開機第一次連能成功拿到資料,後來怎麼試都不行,直接給出了錯誤資訊Warning: ociexecute() [function.ociexecute]: OCIStmtExecute: ORA-24324: service handle not initialized。當時的PHP代碼如下(這段代碼從Oracle獲得資料產生了一個表單):

                $oraUser="VISITOR";
                $oraPass="123456";
                $oraDB="company";
                $conn = OCILogon ($oraUser,$oraPass,$oraDB);
                if (!$conn) {
                   exit;
                }
                $stmt = OCIParse($conn,"select * from visitor.employee");
                if(!$stmt) {
                   exit;
                }
                OciExecute($stmt);
                echo "<table width=75% border='1' cellspacing='0' cellpadding='1'>\n";
                echo "<br/><tr>\n<td>名字</td><td>性別</td><td>員工編號</td><td>工資</td><td>部門</td><td>出生日期</td><td>進入公司日期</td>\n</tr>\n";
                while ($row = oci_fetch_array($stmt, OCI_ASSOC+OCI_RETURN_NULLS)) {
                    echo "<tr>\n";
                    foreach ($row as $item) {
                    echo "<td>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>\n";
                }
                echo "</tr>\n";
                }
                echo "</table>\n";
                OCIFreeStatement($stmt);        
                OCILogoff($conn);
       通過查閱資料,在一個英文論壇不起眼的地方發現有人說,這是PHP5的bug,用oci_new_connect代替OCILogon函數就可以解決問題。

       當時就這麼解決了,也沒管。

       當我做完東西,apache都拆了的時候,發現有些PHP網頁裡,我在使用完資料庫之後漏寫了OCILogoff,也就是沒有釋放串連。我猜這就是癥結所在,因為所有的這些PHP都是用同一個賬戶串連的,產生了衝突,而oci_new_connect建立串連顯然可以避免這個問題。

       所以,我想,如果所有的網頁都在使用完串連之後安全釋放,應該就能夠避免上面的問題。不過,也沒機會進行驗證了,如果有同志遇到這樣的問題,不妨試一下。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.