php使用sprintf拼接sql

本文介绍了一个PHP类,用于封装数据库的常见增删查改操作,包括数据创建、修改、删除和查询,以及通过主键查找数据的方法。实例展示了如何调用这些方法进行数据库操作。

一.封装常用增删查改操作方法

<?php
class BaseDAO{

	//创建数据
	public function create($table_name,$model){
		$columns_k='';
		$columns_v='';
		foreach($model as $key=>$value){
			$columns_k=empty($columns_k)?
				sprintf('`%s`',$key):
				sprintf('%s,`%s`',$columns_k,$key);
			$columns_v=empty($columns_v)?
				sprintf("'%s'",$value):
				sprintf("%s,'%s'",$columns_v,$value);
		}
		$sqlcmd=sprintf("INSERT INTO `%s`(%s) VALUES(%s)",$table_name,
			$columns_k,$columns_v);
		echo $sqlcmd;
	}

	//修改数据
	public function modify($table_name,$model,$primary){
		$columns='';
		$wheres='';
		foreach($model as $key=>$value){
			$columns=empty($columns)?
				sprintf("`%s`='%s'",$key,$value):
				sprintf("%s,`%s`='%s'",$columns,$key,$value);
		}
		$wheres=sprintf("`%s`='%s'",$primary['pk'],$primary['pv']);
		$sqlcmd=sprintf("UPDATE `%s` SET %s WHERE %s",$table_name,$columns,$wheres);
		echo $sqlcmd;
	}

	//删除数据
	public function remove($table_name,$model){
		$wheres='';
		foreach($model as $key=>$value){
			$wheres=empty($wheres)?
				sprintf("`%s`='%s'",$key,$value):
				sprintf("%s and `%s`='%s'",$wheres,$key,$value);
		}
		$sqlcmd=sprintf("DELETE FORM `%s` WHERE %s",
			$table_name,$wheres);
		echo $sqlcmd;
	}

	//查询数据
	public function select($table_name,$conditons){
		$wheres='';
		foreach($conditons as $key=>$value){
			$wheres=empty($wheres)?
				sprintf("`%s`='%s'",$key,$value):
				sprintf("%s and `%s`='%s'",$wheres,$key,$value);
		}
		$sqlcmd=sprintf("SELECT * FROM `%s` WHERE %s",$table_name,$wheres);
		echo $sqlcmd;
	}
	
	//根据主键查找数据
	public function findById($table_name,$primary){
		$sqlcmd=sprintf("SELECT * FROM `%s` WHERE `%s`='%s' LIMIT 1",$table_name,$primary['pk'],$primary['pv']);
		echo $sqlcmd;
	}
}

二.调用实例

<?php
require_once("./BaseDAO.class.php");
echo '<br/>增加<br/>';
BaseDAO::create('cb_admin',array('username'=>'admin','password'=>md5('pwd')));
echo '<br/>查询<br/>';
BaseDAO::select('cb_admin',array('username'=>'admin','password'=>md5('pwd')));
echo '<br/>修改<br/>';
BaseDAO::modify('cb_admin',array('username'=>'admin','password'=>md5('pwd')),array('pk'=>'id','pv'=>1));
echo '<br/>删除<br/>';
BaseDAO::remove('cb_admin',array('username'=>'admin','password'=>md5('pwd')));
echo '<br/>明细<br/>';
BaseDAO::findById('cb_admin',array('pk'=>'id','pv'=>1));



<think>好的,我现在需要回答用户关于PHP拼接字符串的方法和示例的问题。首先,我需要回忆PHP中有哪些常用的字符串拼接方式。根据之前的引用内容,用户已经提到了点号运算符、.=运算符、sprintf函数,还有处理数组时的implode函数。不过用户现在可能想要更详细的解释和示例。 首先,点号运算符(.)是最基本的拼接方式,例如$str = $a . $b。然后,.=运算符可以用于追加字符串到现有变量,比如$str .= $b。sprintf函数允许格式化字符串,类似于C语言的printf,可以用占位符插入变量。另外,对于数组,implode函数可以将数组元素连接成一个字符串,这在构建SQL语句时特别有用,如IN子句。 接下来,我需要确保每个方法都有对应的示例代码,这样用户能更清楚如何使用。例如,点号运算符的例子可以是简单的变量拼接,.=的示例可以展示如何逐步构建字符串,sprintf的示例需要展示不同的占位符,如%s、%d等。implode的例子可能需要展示如何处理一维数组和添加引号的情况,特别是引用5中提到的情况,处理单引号用于SQL查询的情况。 另外,用户提供的引用中有提到性能比较,比如使用点号拼接在大量循环中的性能,可能需要提及虽然点号和.=在性能上差异不大,但在大量操作时需要注意效率。但根据引用1中的测试,使用.=在循环中追加字符串可能更高效,因为不需要重复创建新变量。不过PHP的字符串处理在较新版本中可能有所优化,所以这点可以作为注意事项提到。 还需要注意是否有其他方法,比如双引号字符串内直接插入变量,例如$str = "Hello $name"; 但这种方式是否属于拼接?严格来说,这属于变量插值,但用户可能也想知道这种方法。根据问题中的引用,用户提到的拼接方法可能不包括变量插值,但为了全面性,可以简要提及,并说明其与拼接的区别。 此外,引用3和4提到了处理数组和SQL拼接的情况,这时候implode函数非常有用,特别是处理多维数组可能需要递归处理,但用户可能只需要基础的一维数组示例。同时,SQL拼接时需要注意安全性和注入问题,虽然用户的问题不涉及安全,但可以提到预处理语句更安全,但此处重点在拼接方法。 现在需要组织这些信息,分点列出每个方法,给出示例代码,并引用相关的引用来源。例如,点号运算符和.=对应引用2,sprintf对应引用2,implode对应引用5,数组拼接参考引用3和5。同时,问题生成部分需要提出相关问题,如性能比较、不同方法的适用场景、如何处理多维数组拼接SQL拼接的安全注意事项等。 最后,确保回答结构清晰,符合用户要求的中文回答,使用正确的LaTeX格式,行内公式用$...$,独立公式用$$...$$,但在这个问题中可能不太需要数学公式,不过如果有变量名或代码中的表达式可能需要使用代码块。同时,检查是否遗漏了用户提供的引用内容中的任何重要点,如性能测试示例或SQL中的单引号处理。</think>PHP拼接字符串有多种常用方法,下面通过示例详细介绍: --- ### 1. **点号运算符(.)拼接** 使用`.`直接连接字符串或变量: ```php $name = "张三"; $age = 25; $str = "姓名:" . $name . ",年龄:" . $age; // 输出:姓名:张三,年龄:25 ``` --- ### 2. **复合赋值运算符(.=)** 通过`.=`逐步追加字符串: ```php $str = "开始"; $str .= "追加内容"; $str .= "继续追加"; // 最终$str为:"开始追加内容继续追加" ``` 此方法在循环操作中效率较高,因为避免重复创建新变量[^1]。 --- ### 3. **sprintf() 格式化拼接** 通过占位符(如`%s`、`%d`)动态插入变量: ```php $product = "手机"; $price = 2999.99; $str = sprintf("商品:%s,价格:%.2f元", $product, $price); // 输出:商品:手机,价格:2999.99元 ``` 适合需要控制格式(如小数位数)的场景[^2]。 --- ### 4. **implode() 拼接数组元素** 将数组元素连接为字符串: ```php $arr = ["苹果", "香蕉", "橘子"]; $str = implode("、", $arr); // 输出:苹果、香蕉、橘子 ``` 在SQL查询中常用于拼接`IN`子句: ```php $ids = [1, 2, 3]; $sql = "SELECT * FROM users WHERE id IN ('" . implode("','", $ids) . "')"; // 生成:SELECT * FROM users WHERE id IN ('1','2','3') [^5] ``` --- ### 5. **双引号字符串插值** 直接在双引号内插入变量(非严格意义的拼接): ```php $city = "北京"; $str = "欢迎来到$city!"; // 输出:欢迎来到北京! ``` 注意:仅限简单变量,复杂表达式需用`{}`包裹(如`{$arr[0]}`)。 --- ### 多维数组拼接示例 递归遍历多维数组并拼接: ```php function arrayToString($arr) { $result = []; foreach ($arr as $item) { if (is_array($item)) { $result[] = arrayToString($item); } else { $result[] = $item; } } return implode(", ", $result); } $multiArr = [["a", "b"], "c", [["d"]]]; echo arrayToString($multiArr); // 输出:a, b, c, d [^3] ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值