电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

PHP 和 MySQL 開發的 8 個技巧

瀏覽:69日期:2024-01-25 14:47:09
來源:www.freelamp.com LAMP 架構的網站,我以前注重的多是安裝/配置方面的,講述開發的相對較少,因為自己從事開發也少。本文的原文當然也來自: Published on The O'Reilly Network (http://www.oreillynet.com/) http://www.oreillynet.com/pub/a/onlamp/2002/04/04/webdb.html 看了以后,頗有啟發,以前開發中遇到的一些問題,迎刃而解。所以翻譯出來和大家共享。 1. PHP 中數組的使用 在操作數據庫時,使用關聯數組(associatively-indexed arrays)十分有幫助,下面我們看一個基本的數字格式的數組遍歷: <?php $temp[0] = 'richmond'; $temp[1] = 'tigers'; $temp[2] = 'premiers'; for($x=0;$x<count($temp);$x++) { echo $temp[$x]; echo ' '; } ?> 然而另外一種更加節省代碼的方式是: <?php $temp = array('richmond', 'tigers', 'premiers'); foreach ($temp as $element) echo '$element '; ?> foreach 還能輸出文字下標: <?php $temp = array('club' => 'richmond', 'nickname' =>'tigers', 'aim' => 'premiers'); foreach ($temp as $key => $value) echo '$key : $value '; ?> PHP 手冊中描述了大約 50 個用于處理數組的函數。 2. 在 PHP 字符串中加入變量 這個很簡單的: <?php $temp = 'hello' echo '$temp world'; ?> 但是需要說明的是,盡管下面的例子沒有錯誤: <?php $temp = array('one' => 1, 'two' => 2); // 輸出:: The first element is 1 echo 'The first element is $temp[one].'; ?> 但是如果后面那個 echo 語句沒有雙引號引起來的話,就要報錯,因此建議使用花括號: <?php $temp = array('one' => 1, 'two' => 2); echo 'The first element is {$temp['one']}.'; ?> 3. 采用關聯數組存取查詢結果 看下面的例子: <?php $connection = mysql_connect('localhost', 'albert', 'shhh'); mysql_select_db('winestore', $connection); $result = mysql_query('SELECT cust_id, surname, firstname FROM customer', $connection); while ($row = mysql_fetch_array($result)) { echo 'ID:t{$row['cust_id']}n'; echo 'Surnamet{$row['surname']}n'; echo 'First name:t{$row['firstname']}nn'; } ?> 函數 mysql_fetch_array() 把查詢結果的一行放入數組,可以同時用兩種方式引用,例如 cust_id 可以同時用下面兩種方式:$row['cust_id'] 或者$row[0] 。顯然,前者的可讀性要比后者好多了。 在多表連查中,如果兩個列名字一樣,最好用別名分開: SELECT winery.name AS wname, region.name AS rname, FROM winery, region WHERE winery.region_id = region.region_id; 列名的引用為:$row['wname'] 和 $row['rname']。 在指定表名和列名的情況下,只引用列名: SELECT winery.region_id FROM winery 列名的引用為: $row['region_id']。 聚集函數的引用就是引用名: SELECT count(*) FROM customer; 列名的引用為: $row['count(*)']。 4. 注意常見的 PHP bug 常見的 PHP 糾錯問題是: No page rendered by the Web browser when much more is expected A pop-up dialog stating that the 'Document Contains No Data' A partial page when more is expected 出現這些情況的大多數原因并不在于腳本的邏輯,而是 HTML 中存在的 bug 或者腳本生成的 HTML 的 bug 。例如缺少類似 </table>, </form>, </frame> 之類的關閉 Tag,頁面就不能刷新。解決這個問題的辦法就是,查看 HTML 的源代碼。 對于復雜的,不能查到原因的頁面,可以通過 W3C 的頁面校驗程序 http://validator.w3.org/ 來分析。 如果沒有定義變量,或者變量定義錯誤也會讓程序變得古怪。例如下面的死循環: <?php for($counter=0; $counter<10; $Counter++) myFunction(); ?> 變量 $Counter 在增加,而 $counter 永遠小于 10。這類錯誤一般都能通過設置較高的錯誤報告級別來找到: <?php error_reporting(E_ALL); for($counter=0; $counter<10; $Counter++) myFunction(); ?> 5. 采用 header() 函數處理單部件查詢 在很多 Web 數據庫應用中,一些功能往往讓用戶點擊一個連接后,繼續停留在當前頁面,這樣的工作我叫它“單部件查詢”。 下面是一個叫做 calling.php 的腳本: <!DOCTYPE HTML PUBLIC '//W3C//DTD HTML 4.0 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd' > <html> <head> <title>Calling page example</title> </head> <body> <a href='http://www.hdgsjgj.cn/bcjs/action.php'>Click here!</a> </body> </html> 當用戶點擊上面的連接時,就去調用 action.php。下面是 action.php 的源碼: <?php // 數據庫功能 // 重定向 header('Location: $HTTP_REFERER'); exit; ?> 這里有兩個常見的錯誤需要提醒一下: 調用 header() 函數后要包含一個 exit 語句讓腳本停止,否則后續的腳本可能會在頭發送前輸出。 header() 函數常見的一個錯誤是: Warning: Cannot add header information - headers already sent... header() 函數只能在 HTML 輸出之前被調用,因此你需要檢查 php 前面可能存在的空行,空格等等。 6. reload 的問題及其解決 我以前在寫 PHP 程序時,經常碰到頁面刷新時,數據庫多處理一次的情況。 我們來看 addcust.php: <?php $query = 'INSERT INTO customer SET surname = $surname, firstname = $firstname'; $connection = mysql_connect('localhost', 'fred', 'shhh'); mysql_select_db('winestore', $connection); $result = mysql_query($query, $connection); ?> <!DOCTYPE HTML PUBLIC '//W3C//DTD HTML 4.0 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd' > <html> <head> <title>Customer insert</title> </head> <body> I've inserted the customer for you. </body> </html> ?> 假設我們用下面的連接使用這個程序: http://www.freelamp.com/addcust.php?surname=Smith&firstname=Fred 如果這個請求只提交一次,OK ,不會有問題,但是如果多次刷新,你就會有多條記錄插入。 這個問題可以通過 header() 函數解決:下面是新版本的 addcust.php: <?php $query = 'INSERT INTO customer SET surname = $surname, firstname = $firstname'; $connection = mysql_connect('localhost', 'fred', 'shhh'); mysql_select_db('winestore', $connection); $result = mysql_query($query, $connection); header('Location: cust_receipt.php'); ?> 這個腳本把瀏覽器重定向到一個新的頁面:cust_receipt.php: <!DOCTYPE HTML PUBLIC '//W3C//DTD HTML 4.0 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd' > <html> <head> <title>Customer insert</title> </head> <body> I've inserted the customer for you. </body> </html> 這樣,原來的頁面繼續刷新也沒有副作用了。 7. 巧用鎖機制來提高應用性能 如果我們要緊急運行一個報表,那么,我們可以對表加寫鎖,防治別人讀寫,來提高對這個表的處理速度。 8. 用 mysql_unbuffered_query() 開發快速的腳本 這個函數能用來替換 mysql_query() 函數,主要的區別就是 mysql_unbuffered_query() 執行完查詢后馬上返回,不需要等待或者對數據庫加鎖。 但是返回的行數不能用mysql_num_rows() 函數來檢查,因為輸出的結果集大小未知。
標簽: PHP
主站蜘蛛池模板: 卓能JOINTLEAN端子连接器厂家-专业提供PCB接线端子|轨道式端子|重载连接器|欧式连接器等电气连接产品和服务 | 专业的压球机生产线及解决方案厂家-河南腾达机械厂 | 带式压滤机_污泥压滤机_污泥脱水机_带式过滤机_带式压滤机厂家-河南恒磊环保设备有限公司 | 佛山市钱丰金属不锈钢蜂窝板定制厂家|不锈钢装饰线条|不锈钢屏风| 电梯装饰板|不锈钢蜂窝板不锈钢工艺板材厂家佛山市钱丰金属制品有限公司 | 合肥活动房_安徽活动板房_集成打包箱房厂家-安徽玉强钢结构集成房屋有限公司 | 冷却塔厂家_冷却塔维修_冷却塔改造_凉水塔配件填料公司- 广东康明节能空调有限公司 | 东莞市海宝机械有限公司-不锈钢分选机-硅胶橡胶-生活垃圾-涡电流-静电-金属-矿石分选机 | 明渠式紫外线杀菌器-紫外线消毒器厂家-定州市优威环保 | 玻璃钢板-玻璃钢防腐瓦-玻璃钢材料-广东壹诺 | 厂房出租_厂房出售_产业园区招商_工业地产&nbsp;-&nbsp;中工招商网 | PC阳光板-PC耐力板-阳光板雨棚-耐力板雨棚,厂家定制[优尼科板材] | 东莞注册公司-代办营业执照-东莞公司注册代理记账-极刻财税 | 成都软件开发_OA|ERP|CRM|管理系统定制开发_成都码邻蜀科技 | 岩棉切条机厂家_玻璃棉裁条机_水泥基保温板设备-廊坊鹏恒机械 | 大型冰雕-景区冰雕展制作公司,3D创意设计源头厂家-[赛北冰雕] | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 淋巴细胞分离液_口腔医疗器材-精欣华医疗器械(无锡)有限公司 | 中医中药治疗血小板减少-石家庄血液病肿瘤门诊部 | 仓储货架_南京货架_钢制托盘_仓储笼_隔离网_环球零件盒_诺力液压车_货架-南京一品仓储设备制造公司 | 杭州成人高考_浙江省成人高考网上报名 | SDI车窗夹力测试仪-KEMKRAFT方向盘测试仪-上海爱泽工业设备有限公司 | 托盘租赁_塑料托盘租赁_托盘出租_栈板出租_青岛托盘租赁-优胜必达 | 电动葫芦-河北悍象起重机械有限公司| 对夹式止回阀厂家,温州对夹式止回阀制造商--永嘉县润丰阀门有限公司 | 成都竞价托管_抖音代运营_网站建设_成都SEM外包-成都智网创联网络科技有限公司 | 消泡剂_水处理消泡剂_切削液消泡剂_涂料消泡剂_有机硅消泡剂_广州中万新材料生产厂家 | 运动木地板厂家,篮球场木地板品牌,体育场馆木地板安装 - 欧氏运动地板 | 电动打包机_气动打包机_钢带捆扎机_废纸打包机_手动捆扎机 | 浙江宝泉阀门有限公司 | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | 电池挤压试验机-自行车喷淋-车辆碾压试验装置-深圳德迈盛测控设备有限公司 | 预制直埋蒸汽保温管-直埋管道-聚氨酯发泡保温管厂家 - 唐山市吉祥保温工贸有限公司 | 粉末冶金注射成型厂家|MIM厂家|粉末冶金齿轮|MIM零件-深圳市新泰兴精密科技 | 车牌识别道闸_停车场收费系统_人脸识别考勤机_速通门闸机_充电桩厂家_中全清茂官网 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 智能门锁电机_智能门锁离合器_智能门锁电机厂家-温州劲力智能科技有限公司 | 全自动在线分板机_铣刀式在线分板机_曲线分板机_PCB分板机-东莞市亿协自动化设备有限公司 | 便民信息网_家电维修,家电清洗,开锁换锁,本地家政公司 | 高柔性拖链电缆-聚氨酯卷筒电缆-柔性屏蔽电缆厂家-玖泰电缆 | 深圳高新投三江工业消防解决方案提供厂家_服务商_园区智慧消防_储能消防解决方案服务商_高新投三江 | 老房子翻新装修,旧房墙面翻新,房屋防水补漏,厨房卫生间改造,室内装潢装修公司 - 一修房屋快修官网 |