目前笑話主要存在於一些門戶或者專業的網站,可以使用爬蟲程序將其採集下來,然後保存在本地數據庫中。
笑話數據庫建表的SQL腳本內容如下。
CREATE TABLE IF NOT EXISTS 'joke' ( 'id' int(5) NOT NULL AUTO_INCREMENT, 'content' varchar(600) NOT NULL, PRIMARY KEY ('id') ) ENGINE=MyISAM DEFAULT CHARSET=gbk AUTO_INCREMENT=1001 ; INSERT INTO 'joke' ('id', 'content') VALUES (1, '她:"因為別人都不同情你,我才做你的妻子。"他:"你總算成功了。現在每個人都因此同情我。"'), (2, '女:"為什麼從前你對我百依百順,可結婚才三天,你就跟我吵了兩天的架?"男:"因為我的忍耐是有限度的。"');
該表包含兩個字段,id和content。其中,id表示序號,content為笑話內容。另外,還使用INSERT命令插入了兩條記錄。更多的記錄讀者可以在本書配套的源碼中找到並將該數據文件導入到數據庫中,這樣就在本地服務器上實現了一個小型笑話庫。
在數據庫中查詢笑話內容的代碼如下。
1 function getJokeInfo() 2 { 3 if(isset($_SERVER['HTTP_APPNAME'])){ // SAE 4 $mysql_host = SAE_MYSQL_HOST_M; 5 $mysql_host_s = SAE_MYSQL_HOST_S; 6 $mysql_port = SAE_MYSQL_PORT; 7 $mysql_user = SAE_MYSQL_USER; 8 $mysql_password = SAE_MYSQL_PASS; 9 $mysql_database = SAE_MYSQL_DB; 10 }else{ 11 $mysql_host = "localhost"; 12 $mysql_host_s = "localhost"; 13 $mysql_port = "3306"; 14 $mysql_user = "root"; 15 $mysql_password = "root123"; 16 $mysql_database = "weixin"; 17 } 18 19 $mysql_table = "joke"; 20 $id = rand(1, 1000); 21 $mysql_state = "SELECT * FROM '".$mysql_table."' WHERE 'id' = '".$id."'"; 22 $con = mysql_connect($mysql_host.':'.$mysql_port, $mysql_user, $mysql_pass word); 23 if (!$con){ 24 die('Could not connect: ' . mysql_error()); 25 } 26 27 mysql_query("SET NAMES 'UTF8'"); 28 mysql_select_db($mysql_database, $con); 29 $result = mysql_query($mysql_state); 30 31 $joke = ""; 32 while($row = mysql_fetch_array($result)) 33 { 34 $joke = $row["content"]; 35 break; 36 } 37 mysql_close($con); 38 return $joke; 39 }
上述代碼解讀如下。
第3~17行:定義數據庫環境變量,此處判斷程序運行環境是SAE還是本地服務器環境,分別定義不同的環境變量。
第19~21行:構造了執行查詢的SQL語句,從表「joke」中隨機查詢一條記錄。
第22~25行:進行數據庫連接。如果連接失敗,將執行「die」部分。
第27行:設置字符集為「UTF8」,以便正常顯示中文。
第28行:設置活動的MySQL數據庫。
第29行:使用mysql_query()函數向MySQL發送命令。
第31~36行:將查詢到的結果存在變量中。
第37行:關閉數據庫連接。
第38行:返回查詢的內容。
一個微信查看笑話的功能如圖4-21所示。
圖4-20 微信天氣預報
圖4-21 微信查看笑話