PHP/TP一些避免使用的用法
2017-03-28 14:30
134 查看
1 避免一個預定義變量賦給多處。如果是string類型,會過濾掉所有錯誤的過濾條件。
見以下代碼的輸出
輸出
如果是%s,則會把where條件都過濾掉了,可能造成很驗證的後果。
2 數組遍歷的引用問題
若數組遍歷使用了引用,當再次遍歷該數組的時候,不要用同樣的變量名。否則最後一個數組的值會被倒數第二個覆蓋掉。
解決辦法:變量名不要重複,換一個新的變量。
修改後的code
測試代碼
輸出
見以下代碼的輸出
public function testSql() { $fileID = array("dbc", null); $loginID = ""; $result = M("user")->where("userID='%s' or email='%s'", $loginID)->find(); echo M()->getLastSql() . "<br>"; $resutl2 = M("file")->where("filekey=%d or fileID=%d", $fileID)->find(); echo M()->getLastSql() . "<br>"; $data['fileID'] = array("in", $fileID); $result = D("File")->where($data)->find(); echo M()->getLastSql() . "<br>"; }
輸出
SELECT * FROM `user` LIMIT 1 SELECT * FROM `file` WHERE ( filekey=0 or fileID=0 ) LIMIT 1 SELECT * FROM `file` WHERE ( `fileID` IN ('dbc',null) ) LIMIT 1
如果是%s,則會把where條件都過濾掉了,可能造成很驗證的後果。
2 數組遍歷的引用問題
若數組遍歷使用了引用,當再次遍歷該數組的時候,不要用同樣的變量名。否則最後一個數組的值會被倒數第二個覆蓋掉。
解決辦法:變量名不要重複,換一個新的變量。
foreach ($issueData as $p => &$issue) { if (!$issue['hidden'] && $issue['price'] && (int)($issue['price']) === 0) { $issue['access'] = TRUE; } elseif ($userData) { $issueID = $issue['issueID']; $issue["access"] = $userData[$issueID] ? true : false; } else { $issue["access"] = FALSE; } } $responseData = array(); foreach ($issueData as $i => $issue) { if ($issue['hidden']) { if ($userToken && $issue['access']) { $responseData[] = $issue; } } else { $responseData[] = $issue; } }
修改後的code
foreach ($issueData as $p => &$issue) { if (!$issue['hidden'] && $issue['price'] && (int)($issue['price']) === 0) { $issue['access'] = TRUE; } elseif ($userData) { $issueID = $issue['issueID']; $issue["access"] = $userData[$issueID] ? true : false; } else { $issue["access"] = FALSE; } } $responseData = array(); foreach ($issueData as $i => $item) { if ($item['hidden']) { if ($userToken && $item['access']) { $responseData[] = $item; } } else { $responseData[] = $item; } }
測試代碼
$data=array(); $arr=array("abc","efg"); $arr2=array("rtrt","yyy"); foreach ($arr as $k => &$v) { $v=$v.$k; } print_r($arr); foreach ($arr2 as $k => $v) { $data[]=$v; } print_r($data); print_r($arr);
輸出
Array ( [0] => abc0 [1] => efg1 ) Array ( [0] => abc0 [1] => abc0 ) Array ( [0] => abc0 [1] => abc0 )
相关文章推荐
- php中soap 的使用实例和一些个人看法!亲测,无需手写WSDL文件,提供自动生成WSDL文件类
- [PHP][使用PHPCxcel制作excel表格并导出文件的用法及成功实例[已验证][原创]
- 使用MAC OS X进行PHP开发的一些建议和技巧
- 关于Spread打印的一些属性用法__页眉页脚的使用
- php--得到我们开始使用php前的一些参数:变量 / 常量 / 模块 / 函数 / 类
- PHP的一些特殊用法
- php中使用session避免在刷新页面造成反复提交表单
- php 数组当中一些特殊使用
- 注意PHP正则用法中ereg的使用
- php中magic_quotes_gpc函数一些用法
- android中handler的一些总结以及使用(一)之handler的基本用法
- PHP使用到的一些系统自带常量
- PHP手册一些函数易混淆用法笔记
- php中使用include(require)嵌套包含文件时的一些注意问题
- 转载【TP3.2】:使用PHP生成二维码
- 公司要使用php做一些开发,开始学习php
- php、yii2使用过程中的一些技巧
- PHP 中使用ajax时一些常见错误总结整理
- php中的curl使用入门教程和常见用法实例
- 学习PHP面向对象(四)_get(),_set()的用法 这种方法不推荐使用