這是由于數(shù)據(jù)庫連接數(shù)過多導致的,說明之前建立的連接你沒有釋放。
創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站制作、做網(wǎng)站、臨澤網(wǎng)絡(luò)推廣、重慶小程序開發(fā)公司、臨澤網(wǎng)絡(luò)營銷、臨澤企業(yè)策劃、臨澤品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)公司為所有大學生創(chuàng)業(yè)者提供臨澤建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:jinyejixie.com
看到你的需求是實時獲取數(shù)據(jù)庫里面的內(nèi)容,可以考慮使用內(nèi)存數(shù)據(jù)庫,這樣返回的效率高,也會避免過多連接的錯誤。
可以使用redis和memcache來解決這個問題。代碼如下,記得首先要安裝redis,并且要安裝php-redis擴展。
?php
$redis = new Redis();
$redis-connect('127.0.0.1', 6379);//serverip port
$redis-auth('mypassword');//my redis password
$redis -set( "test" , "Hello World");
echo $redis -get( "test");
php中異常處理方法總結(jié):
當異常被觸發(fā)時,通常會發(fā)生:
在PHP5中添加了類似于其它語言的錯誤異常處理模塊。在 PHP代碼中所產(chǎn)生的異??杀?throw語句拋出并被 catch 語句捕獲。需要進行異常處理的代碼都必須放入 try 代碼塊內(nèi),以便捕獲可能存在的異常。每一個 try 至少要有一個與之對應(yīng)的 catch。使用多個 catch 可以捕獲不同的類所產(chǎn)生的異常。當 try 代碼塊不再拋出異常或者找不到 catch 能匹配所拋出的異常時,PHP 代碼就會在跳轉(zhuǎn)到最后一個 catch 的后面繼續(xù)執(zhí)行。當然,PHP 允許在 catch 代碼塊內(nèi)再次拋出(throw)異常。當一個異常被拋出時,其后(譯者注:指拋出異常時所在的代碼塊)的代碼將不會繼續(xù)執(zhí)行,而 PHP 就會嘗試查找第一個能與之匹配的 catch。如果一個異常沒有被捕獲,而且又沒用使用 set_exception_handler() 作相應(yīng)的處理的話,那么 PHP 將會產(chǎn)生一個嚴重的錯誤,并且輸出 Uncaught Exception ... (未捕獲異常)的提示信息。
1、異常類的層級關(guān)系:
代碼如下 復制代碼
class NotFoundException extends Exception{}
class InputException extends Exception{}
class DBException extends Exception{}
2、配置未捕捉異常的處理器:
代碼如下 復制代碼
function exception_uncaught_handler(Exception $e) {
header('Content-type:text/html; charset=utf-8');
if ($e instanceof NotFoundException)
exit($e-getMessage());
elseif ($e instanceof DBException)
exit($e-getMessage());
else
exit($e-getMessage());
}
set_exception_handler('exception_uncaught_handler');
3、在數(shù)據(jù)庫連接代碼,手動拋出DBException異常但未使用try…catch進行捕獲處理,該異常將被PHP自定義異常處理器
代碼如下 復制代碼
exception_uncaught_handler()函數(shù)處理:
$this-resConn = mysql_connect ($CONFIGS['db_host'], $CONFIGS['db_user'], $CONFIGS['db_pwd']);
if (false == is_resource($this-resConn))
throw new DBException('數(shù)據(jù)庫連接失敗。'.mysql_error($this-resConn));
4、業(yè)務(wù)邏輯一瞥:
if (0 != strcmp($curAlbum-interest_id, $it))
throw new NotFoundException('很抱歉,你所訪問的相冊不存在');
以上就是PHP自定義異常處理器的具體使用方法
實例
代碼如下 復制代碼
?php
class customException extends Exception
{
public function errorMessage()
{
//error message
$errorMsg = 'Error on line '.$this-getLine().' in '.$this-getFile()
.': b'.$this-getMessage().'/b is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "someone@example.com";
try
{
//check if
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
{
//throw exception if email is not valid
throw new customException($email);
}
//check for "example" in mail address
if(strpos($email, "example") !== FALSE)
{
throw new Exception("$email is an example e-mail");
}
}
catch (customException $e)
{
echo $e-errorMessage();
}
catch(Exception $e)
{
echo $e-getMessage();
}
?
例子解釋:
上面的代碼測試了兩種條件,如何任何條件不成立,則拋出一個異常:
1.customException() 類是作為舊的 exception 類的一個擴展來創(chuàng)建的。這樣它就繼承了舊類的所有屬性和方法。
2.創(chuàng)建 errorMessage() 函數(shù)。如果 e-mail 地址不合法,則該函數(shù)返回一個錯誤消息。
3.執(zhí)行 "try" 代碼塊,在第一個條件下,不會拋出異常。
4.由于 e-mail 含有字符串 "example",第二個條件會觸發(fā)異常。
5."catch" 代碼塊會捕獲異常,并顯示恰當?shù)腻e誤消息
如果沒有捕獲 customException,緊緊捕獲了 base exception,則在那里處理異常。
重新拋出異常
有時,當異常被拋出時,您也許希望以不同于標準的方式對它進行處理??梢栽谝粋€ "catch" 代碼塊中再次拋出異常。
代碼如下 復制代碼
?php
/*
*/
/*
* 總結(jié):PHP異常的使用方法分三步:
* 第一步:定義異常類,如果不定義就用系統(tǒng)默認的異常類;
* 第二步:當出現(xiàn)異常時用 throw 拋出異常,例如 ex1($num2);異常的參數(shù)是$num2用該異常的getMessage()獲取;
* 第三步:觸發(fā)異常,用try子句,當滿足條件時 throw new ex1($num);
* 第四步:catch捕獲異常 catch (ex2 $e),相當于實例化一個定義好的異常類ex2為$e;
*
* 注意,異??梢远x多個,但是只能觸發(fā)一個,也就是說只能用catch捕獲一個異常
*/
//================基本異常類
//創(chuàng)建可拋出一個異常的函數(shù)
function num($num){
if ($num1){//異常拋出條件
$msg=”數(shù)值不能大于1″;//異常提示信息
throw new Exception($msg);//拋出異常
}
echo “數(shù)值小于1″;
}
//在 “try” 代碼塊中觸發(fā)異常
try {
num(3);
echo “執(zhí)行正?!?
}
//捕獲異常
catch (Exception $e){
echo “錯誤信息:”.$e-getMessage();//Exception()的系統(tǒng)方法獲取異常信息
echo “錯誤文件:”.$e-getFile();//Exception()的系統(tǒng)方法獲取異常文件名
echo “行數(shù):”.$e-getLine();//Exception()的系統(tǒng)方法獲取異常行數(shù)
}
//======================================================================
echo “br========================================================br”;
//擴展基本異常類
function checkEmail($email){//定義一個可以拋出異常的判斷EMAIL合法性的函數(shù)
if (filter_var($email,FILTER_VALIDATE_EMAIL)==false){
throw new checkEmailException($email);//拋出異常用EMAIL做參數(shù)
}
echo “郵件合法”;
}
class checkEmailException extends Exception{//定義擴展異常類
public function errormsg(){
$msg=”錯誤原因:”.$this-getMessage().”不是一個合法的EMAIL地址!”;
$msg.=”錯誤文件名:”.$this-getFile();
$msg.=”錯誤行數(shù):”.$this-getLine();
echo $msg;
}
}
$email=”email…..@chhua.com“;
try {//觸發(fā)異常
checkEmail($email);
}
//捕獲異常
catch (checkEmailException $e){
$e-errormsg();
}
//==================================多個異常的捕獲
echo “br===================================================br”;
class ex1 extends Exception{//定義一個異常類
public function msg(){
$msg=”錯誤原因:”.$this-getMessage().”大于100br”;
$msg.=”錯誤文件:”.$this-getFile().”Br”;
$msg.=”錯誤代碼:”.$this-getCode().”br”;
$msg.=”行數(shù):”.$this-getLine().”br”;
echo $msg;
}
}
class ex2 extends Exception{//定義一個異常類
public function msg(){
$msg=”錯誤原因:”.$this-getMessage().”等于100br”;
$msg.=”錯誤文件:”.$this-getFile().”Br”;
$msg.=”行數(shù):”.$this-getLine().”br”;
echo $msg;
}
}
$num2=100;
try {
if ($num2100){//當條件滿足時觸發(fā)
throw new ex1($num2);
}
if ($num2==100){//當條件滿足時觸發(fā)
throw new ex2($num2);
}
}
catch (ex2 $e){//捕獲觸發(fā)的異常
$e-msg();
}
catch (ex1 $e){//捕獲觸發(fā)的異常
$e-msg();
}
/*
* 總結(jié):PHP異常的使用方法分三步:
* 第一步:定義異常類,如果不定義就用系統(tǒng)默認的異常類;
* 第二步:當出現(xiàn)異常時用 throw 拋出異常,例如 ex1($num2);異常的參數(shù)是$num2用該異常的getMessage()獲取;
* 第三步:觸發(fā)異常,用try子句,當滿足條件時 throw new ex1($num);
* 第四步:catch捕獲異常 catch (ex2 $e),相當于實例化一個定義好的異常類ex2為$e;
*
* 注意,異常可以定義多個,但是只能觸發(fā)一個,也就是說只能用catch捕獲一個異常
*/
?
看了你和樓上的對答,有個小建議。
首先你從java轉(zhuǎn)php,說明有語言基礎(chǔ),php基礎(chǔ)可以先跳過。
原生寫法可能浪費時間,建議你找個php框架入手,里面集成了連接數(shù)據(jù)庫的方法,避免出現(xiàn)如此低級的問題。
還有,你也可以將java的思想帶入PHP中,都可以以對象來處理,沒必要從這種面對過程方面來學習。
說明mysql_connect
時候就密碼錯誤了,test數(shù)據(jù)庫是可以匿名登錄的
php訪問數(shù)據(jù)庫出錯:Warning: mysql_fetch_array(),是參數(shù)設(shè)置錯誤造成的,解決方法如下:
1、首先打開電腦后,同時按住電腦鍵盤的【開始鍵】和【R鍵】,打開電腦的程序運行彈窗。
2、在電腦左下角彈出的程序運行彈窗中,輸入字母【cmd】,然后點擊【確定】按鈕。
3、在彈出的運行界面中,輸入【mysql -u root -p】,此時會出現(xiàn)屬于密碼的命令行,在后面輸入自己數(shù)據(jù)庫的密碼即可。
4、數(shù)據(jù)庫連接成功后,輸入【show global variables like 'port';】,注意不要忘記輸入最后的分號。
5、在展現(xiàn)出來的Mysql信息中,可以看到port的值,這個值就是本地數(shù)據(jù)庫的端口號。,一般都是3306。
6、知道本地數(shù)據(jù)庫端口號后,回到php代碼的數(shù)據(jù)庫配置中將端口號改成正確的端口號即可,這樣就不會報數(shù)據(jù)庫端口異常的錯誤了。
名稱欄目:php數(shù)據(jù)庫連接異常處理,數(shù)據(jù)庫連接PHP
本文路徑:http://jinyejixie.com/article36/dssiopg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、網(wǎng)站策劃、網(wǎng)站收錄、品牌網(wǎng)站建設(shè)、網(wǎng)站改版、移動網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)