`
flex_莫冲
  • 浏览: 1092458 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

PHP/TP一些避免使用的用法

    博客分类:
  • php
阅读更多
1 避免一個預定義變量賦給多處。如果是string類型,會過濾掉所有錯誤的過濾條件。
見以下代碼的輸出
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 ) 
分享到:
评论

相关推荐

    tp6使用rabbitmq

    【标题】:“TP6使用RabbitMQ” 在PHP框架ThinkPHP6(简称TP6)中集成RabbitMQ是一项常见的任务,用于实现异步处理、消息队列和分布式系统的通信。RabbitMQ是一个开源的消息代理和队列服务器,它遵循AMQP(Advanced...

    TP5 namespace 和 use 的用法

    在PHP开发中,尤其是使用了Laravel或ThinkPHP5(TP5)这样的现代框架时,`namespace` ...在压缩包中的`demo` 文件可能包含了一些关于如何在TP5中使用`namespace` 和 `use` 的示例代码,你可以参考这些例子来加深理解。

    tp5执行shell命令定时执行命令行运行php脚本

    同时,避免在命令中包含敏感信息,因为它们可能会被记录在日志中。如果可能,使用环境变量来存储这些信息。 6. **错误处理与日志记录**: 在命令行模式下运行脚本时,错误通常不会自动显示,因此需要在代码中添加...

    php tp5接口开发dome

    - **安全编码**:避免SQL注入、XSS攻击等,使用预编译语句,过滤或转义用户输入。 8. **测试与文档** - **自动化测试**:使用PHPUnit等工具编写单元测试和集成测试,确保接口的正确性。 - **API文档**:使用...

    Tp3 同时使用两个数据库

    同时,合理规划数据库的使用,避免频繁的跨数据库操作,以提高系统的性能。 在实际项目中,可能还会涉及到数据库读写分离、分布式数据库等复杂情况。在这种情况下,可以利用ThinkPHP3提供的数据库路由规则或者...

    tp5和tp5.1发送邮件拓展包

    7. **使用方法**: 在ThinkPHP项目中,开发者可以先通过Composer安装PHPMailer,然后在控制器或服务类中实例化PHPMailer对象,设置发件人、收件人、主题、正文等参数,并调用相应的发送方法。如果使用OAuth,还需要...

    tp5.1+swoole+redis实战直播平台 (学习版)-tp5live.zip

    【描述】中的"tp5.1+swoole+redis实战直播平台 (学习版)-tp5live"进一步确认了这个项目是用于教学目的,旨在帮助开发者理解如何在实际项目中应用这些先进的PHP技术和工具。 **ThinkPHP5.1** ThinkPHP5.1是ThinkPHP...

    phpWord,php生成word文档,替换word内容重新生成

    3. **添加内容**:添加文本、段落、标题等可以使用`addSection()`方法创建新段落,然后使用`addText()`方法添加文本。 ```php $section = $phpWord-&gt;addSection(); $section-&gt;addText('这是一段测试文本'); ```...

    thinkphp5.1 对接 phpword 使用phpoffice 自己搞了一下午终于搞成了一个对接的,网上的各种bug

    5. 使用Writer对象的`writeFile()`或`save()`方法将内容保存到本地或在线存储。 在开发过程中,可能还会遇到网上的教程或示例代码中存在的bug。这些bug可能源于版本差异、环境配置不一致或错误的理解。遇到问题时,...

    TP5TP6图片处理为透明圆角图片.rar

    在描述中提到,“使用方法是将方法添加到Image类中,直接调用使用”,这暗示了这个解决方案可能涉及到对ThinkPHP内置的`Image`类进行扩展,添加一个新的方法来生成透明圆角的图片。这种做法通常是为了避免对原框架的...

    tp5.1消息队列 think-queue

    标题 "tp5.1消息队列 think-queue" 指的是使用ThinkPHP5.1框架集成的消息队列组件——think-queue。消息队列在软件开发中扮演着重要角色...理解其安装、配置、使用方法以及应用场景,对于优化ThinkPHP5.1项目至关重要。

    thinkPHP5使用Rabc实现权限管理

    ### gmars/tp5-rbac拓展包使用方法 在安装并配置好拓展包之后,你可以按照以下步骤使用gmars/tp5-rbac拓展包来实现权限管理: 1. **创建和初始化Rbac所需数据库表** 使用拓展包提供的方法来创建和初始化所需的...

    文件批量上传 tp+layui

    标题“文件批量上传 tp+layui”表明我们要讨论的是一个基于ThinkPHP(简称tp)框架和Layui前端组件库实现的文件批量上传功能。Layui是一个轻量级的前端框架,提供了丰富的UI组件,而ThinkPHP则是一个流行的PHP开发...

    TP框架单元测试

    在进行单元测试时,还可以考虑使用模拟(Mock)对象来隔离被测试的代码,避免外部依赖对测试的影响。ThinkPHP的单元测试支持使用`Mockery`库来创建和配置模拟对象。通过模拟对象,可以控制方法的返回值或行为,以...

    TP5 上传文件

    标题 "TP5 上传文件" 指的是使用 ThinkPHP5 (TP5) 框架进行文件上传操作。在 PHP 开发中,ThinkPHP5 是一个广泛应用的 MVC 框架,它提供了丰富的功能和良好的文档支持,使得开发者能够快速、高效地构建 Web 应用。...

    tp3.2 -webuploader较大视频文件分段上传方法.rar

    本示例"tp3.2 -webuploader较大视频文件分段上传方法"正是针对大体积视频文件,采用分段上传策略来解决上传速度和服务器压力的问题。 首先,我们需要了解ThinkPHP 3.2框架。这是一个MVC(Model-View-Controller)...

    TP5 面向对象和命名空间

    在PHP开发中,ThinkPHP5(简称TP5)是一个广泛使用的框架,它极大地简化了Web应用程序的开发过程。本篇文章将深入探讨TP5中的面向对象编程(OOP)概念以及命名空间的使用。 **面向对象编程(OOP)** 面向对象编程...

    tp6+mongodb.zip

    此外,避免在查询中使用`$where`操作符,因为它会导致全表扫描,效率低下。利用TP6的`raw()`方法,可以直接执行MongoDB的原生查询,以利用其高级查询功能。 最后,关于事务支持,虽然MongoDB4.0版本开始引入了多...

    jpush(极光推送)远程调用api PHP版

    在TP中,你可以使用`curl_init`、`curl_setopt`等函数,或者直接使用TP提供的`curl_request`方法。 6. **安全注意事项** - 保护好你的AppKey和MasterSecret,不要暴露在客户端或者公开的代码中。 - 使用HTTPS协议...

    TP自定义分页

    - **性能优化**:避免在分页查询中使用`JOIN`操作,因为这会导致全表扫描,影响性能。尽量只查询必要的字段。 - **安全考虑**:确保用户输入的页码经过验证,防止非法请求。 - **用户体验**:合理设定每页显示的记录...

Global site tag (gtag.js) - Google Analytics