直接使用try...catch....結構。比如:

創(chuàng)新互聯(lián)主營懷寧網(wǎng)站建設的網(wǎng)絡公司,主營網(wǎng)站建設方案,手機APP定制開發(fā),懷寧h5微信平臺小程序開發(fā)搭建,懷寧網(wǎng)站營銷推廣歡迎懷寧等地區(qū)企業(yè)咨詢
try
{
DB::query("SELECT?count(*)?FROM?pre_111?WHERE?fid?=?$fid";
}
catch(exception?$ex)
{
echo($ex-getMessage());
}
從Mysql 5.5 開始為我們提供了SIGNAL函數(shù)來實現(xiàn)這個功能。
[sql] view plain copy
CREATE TRIGGER `tg_order_create` AFTER INSERT ON `tp_order` FOR EACH ROW BEGIN
DECLARE msg varchar(200);
/*凍結金額*/
IF 2=NEW.condition THEN
UPDATE `tp_user` SET `frozen_amount`=`frozen_amount`+NEW.amount WHERE `id`=NEW.uid AND `amount`-`frozen_amount` NEW.amount;
/*如果余額不足,產(chǎn)生一個錯誤*/
IF ROW_COUNT() 1 THEN
set msg = "用戶余額不足以完成支付.";
SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = msg;
END IF;
/*扣除金額*/
ELSEIF 3=NEW.condition THEN
UPDATE `tp_user` SET `amount`=`amount`-NEW.amount WHERE `id`=NEW.uid AND `amount`-`frozen_amount` NEW.amount;
/*如果余額不足,產(chǎn)生一個錯誤*/
IF ROW_COUNT() 1 THEN
set msg = "用戶余額不足以完成支付.";
SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = msg;
END IF;
END IF;
END;
這里這條觸發(fā)器的功能是庫存操作,當庫存足夠的時候 減少庫存,否則 拋出一個異常并報告商品庫存不足:
[sql] view plain copy
CREATE TRIGGER `TG_order_detail_dec_stock` BEFORE INSERT ON `tp_order_detail` FOR EACH ROW BEGIN
DECLARE msg VARCHAR(200);
UPDATE `tp_stock` SET `num`=`num`-NEW.num WHERE `goods_id`=NEW.goods_id AND `mid`=NEW.mid AND `num`=NEW.num;
IF ROW_COUNT() 1 THEN
SELECT CONCAT(`name`, ' 庫存不足.') INTO msg FROM `tp_goods` WHERE `id`=NEW.goods_id;
SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = msg;
END IF;
END;
在PHP端的處理(注:使用ThinkPHP框架):
[php] view plain copy
//前面省略若干行....
try {
if (false === ($order_pk = $tbl_order-add($order))) {
$tbl-rollback();
echo json_encode(array('success' = -1, 'message' = "創(chuàng)建訂單失敗!."), JSON_UNESCAPED_UNICODE);
return;
}
}catch (\PDOException $e){
$errInfo=$e-errorInfo[2];
$tbl-rollback();
echo json_encode(array('success' = -1, 'message' = "創(chuàng)建訂單失敗!,{$errInfo}"), JSON_UNESCAPED_UNICODE);
return;
}
//后面省略若干行....
DECLARE處理程序的使用:
DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement
其中,
handler_type的取值范圍:CONTINUE | EXIT | UNDO
condition_value的取值范圍:SQLSTATE [VALUE] sqlstate_value | condition_name | SQLWARNING | NOT FOUND | SQLEXCEPTION | mysql_error_code
這個語句指定每個可以處理一個或多個條件的處理程序。如果產(chǎn)生一個或多個條件,指定的語句被執(zhí)行。?對一個CONTINUE處理程序,當前子程序的執(zhí)行在執(zhí)行處理程序語句之后繼續(xù)。對于EXIT處理程序,當前BEGIN...END復合語句的執(zhí)行被終止。UNDO 處理程序類型語句還不被支持。
· ? SQLWARNING是對所有以01開頭的SQLSTATE代碼的速記。
· ? ?NOT FOUND是對所有以02開頭的SQLSTATE代碼的速記。
· ? ?SQLEXCEPTION是對所有沒有被SQLWARNING或NOT FOUND捕獲的SQLSTATE代碼的速記。
注:除了SQLSTATE值,MySQL錯誤代碼也不被支持。
例:
[sql]?view?plain?copy?print?
delimiter?$$??
CREATE?TABLE?`_t1`?(??
`id`?int(11)?NOT?NULL?AUTO_INCREMENT,??
`val1`?varchar(20)?DEFAULT?NULL,??
`val2`?int(11)?DEFAULT?NULL,??
PRIMARY?KEY?(`id`)??
)?ENGINE=InnoDB?AUTO_INCREMENT=113?DEFAULT?CHARSET=latin1$$
[sql]?view?plain?copy?print?
DELIMITER?$$??
CREATE?DEFINER=`abandonship`@`%`?PROCEDURE?`P_TestException`()??
BEGIN??
declare?_var,_err?int?default?0;??
declare?continue?handler?for?sqlexception,?sqlwarning,?not?found?set?_err=1;??
insert?into?_t1(val1,?val2)?value(2012,'abandonship');??
if?_err=1?then??
set?_var?=?2;??
end?if;??
select?case?when?_var?=?2?then?'出錯了'?else?_var?end;
調(diào)用該存儲過程將返回:出錯了
1.停止mysql服務:
右鍵點擊“我的電腦”圖標,出現(xiàn)右鍵菜單后左鍵點擊“管理”。彈出“電腦管理”對話框后,左鍵點擊“服務與程序”,接著點擊“服務”,最后找到mysql服務并將其關閉。
2.進入控制面板,點擊卸載程序,進入卸載程序對話框后卸載mysql。
3.組合鍵W+R進入運行,輸入“regedit”,查看下面 ?HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 的鍵值,將mysql鍵值(mysql、mysqladmin)刪掉 。
4.重啟系統(tǒng)。
5.再次安裝mysql程序。
flask中向mysql中數(shù)據(jù)操作會出現(xiàn)字符集的問題,比如創(chuàng)建數(shù)據(jù)模型:db.create_all()時,控制臺會出現(xiàn)warring 1366 的字符集警告,是這樣的:
這個異常是mysql問題,而非python的問題,這是因為mysql的字段類型是utf-xxx, 而在mysql中這些utf-8數(shù)據(jù)類型只能存儲最多三個字節(jié)的字符,而存不了包含四個字節(jié)的字符。
解決方法:
修改mysql數(shù)據(jù)表的字段類型為utf8mb4,只有在mysql5.5之后可以支持。
在flask配置中設置字符集:
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123456@127.0.0.1:3306/test?charset=utf8"
正常的下載和安裝教程網(wǎng)上很多,在此不贅述了,下面聊一下碰到的異常情況。
點擊execute后,出現(xiàn)圖中的叉叉后,不要慌,復制requirement下面的英文名稱,在網(wǎng)上搜索下載后,手動安裝,安裝完成后,再點擊back,返回到上一步;然后再點擊next,紅叉叉全消失了。
下載地址:
盡管滿屏廣告,但不用擔心下載下來后,安裝一大堆垃圾!
python正常下載和安裝即可,vs如果到官網(wǎng)下,可能速度會很慢很慢,而且那幾個版本的文件都比較大,搞不好,會讓你下載到懷疑人生,當然,從別的渠道還是能找到資源的。
總結:1、安裝的過程中,首先要了解一點英文,否則是很難安裝下去的
2、碰到了異常,分析異常產(chǎn)生的原因,能否用其他方法解決?多去思考,多去嘗試
3、如果沒把握,最好先備份好系統(tǒng)
4、在折騰中提高
mysql下載的時候出現(xiàn)運行環(huán)境異常是mysql服務沒有啟動。
1、以管理員身份運行cmd(左下角開始按鈕選擇以管理員身份運行cmd即可)。
2、輸入:cdC:\ProgramFiles\MySQL\MySQLServer5.7\bin進入mysql的bin文件夾。
3、輸入:mysqld-install(如果不用管理員身份運行,將會因為權限不夠而出現(xiàn)錯誤:Install/RemoveoftheServiceDenied。)。
4、安裝成功。
5、運行mysqld--initialize(標題問題所在,若沒有init則不存在data目錄,自然無法啟動成功)。
6、安裝成功后就要啟動服務了,繼續(xù)在cmd中輸入:netstartmysql,服務啟動成功。
7、服務啟動成功之后,就可登錄了,輸入mysql-uroot-p經(jīng)常會遇到直接回車登陸不上的情況,原因在于5.7版本在安裝時自動給了一個隨機密碼。
新聞名稱:怎么讓mysql異常 mysql自定義異常
鏈接URL:http://chinadenli.net/article22/hpjgcc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設、App設計、品牌網(wǎng)站制作、ChatGPT、網(wǎng)站改版、響應式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)