php拼接SQL语句

首先引入mypdo类

php定义操作mysql数据库类并引用-优快云博客

<?php
//自动加载类
spl_autoload_register(function($class_name){
    require "./inc/{$class_name}.class.php";
});

//配置参数
$param=array(
     'host'=>"127.0.0.1",
     'user'=>'root',
     'pwd'=>'123456',
     'dbname'=>'datagoods'
);
//获取单例
$mypdo=MyPDO::getInstance($param);

插入语句
 

$table="products";
$data['proname']="钢笔";
$data['proprice']=100;

//第一步:拼接字段名
$keys=array_keys($data);//获取所有字段名
$keys=array_map(function($key){//在所有字段名上添加反引号
	return "`{$key}`";
},$keys);
$keys= implode(',',$keys);//字段名用,隔开

//第二部获取值
$values=array_values($data);
$values=array_map(function($v){
	return "'{$v}'";
},$values);
$values=implode(',',$values);

//第三步:拼接SQL语句insert into
$sql="insert into  `{$table}`({$keys}) values({$values})";
//echo $sql;
$rs=$mypdo->exec($sql);
echo $rs;

数据更新sql拼接

$table="products";
$data['proID']=83;
$data['proname']="铅笔";
$data['proprice']=100;
//获取主键
function getPrimaryKey($table){
	$sql="desc $table";
    $rs =$GLOBALS['mypdo']->fetchAll($sql);
    //echo $rs;
    //循环判断主键
   foreach($rs as $row){
    	if($row['Key']=="PRI")
    		return $row['Field'];
    }
}
//获取数组下标,不区分大小写
function getPKIndex($pk,$array){
	foreach($array as $index=>$v){
         if(strtoupper($v)==strtoupper($pk))
         	return $index;
	}
	return null;
}

$pk=getPrimaryKey($table);


//第一步:获取值
$keys=array_keys($data);
$index=array_search($pk,$keys);//返回组件在数组中的下标
//$index= getPKIndex($pk,$keys);//不区分大小写
unset($keys[$index]);


//第二步:拼接`键`='值'的形式
$keys=array_map(function($key) use($data){
     return "`{$key}`='{$data[$key]}'";
}, $keys);
$keys=implode(',', $keys);
//第三步:拼接SQL语句update
$sql="update {$table} set $keys where $pk =$data[$pk]";
//echo $sql;


$rs=$mypdo->exec($sql);
echo $rs;

简单查询语句拼接

function  select($table,$cond=array()){
	$sql="select * from {$table} where 1";
	if(!empty($cond)){
	   foreach($cond as $k=>$v){
         if(is_array($v)){//条件值是数组类型
             switch ($v[0]) {//$v[0] 保存的是符号 $v[1] 保存的是值
             	case 'eq'://等于
             	    $op="=";
             		break;
             	case 'gt'://大于
             	    $op=">";
             		break;
             	case 'lt':
             	    $op="<";
             		break;
             	case 'gte':
             	case 'egt':
             	    $op=">=";
             		break;
             	case 'lte':
             	case 'elt':
             	    $op="<=";
             		break;
             	case 'neq':
             	    $op="<>";
             		break;
             }
             $sql.=" and `$k` $op '$v[1]'";
         }else{
		     $sql.=" and `$k`='$v'";
	     }
       }
	}
	return $sql;
}
$table="products";
$cond=array(
   'proname'=>"钢笔",
   'proprice'=>array('gte',100)
);
$sql=select($table,$cond);
$list=$mypdo->fetchAll($sql);
echo "<pre>";
var_dump($list);

一定要注意函数内部使用外部变量,一定要用use或$GLOBALS[''],否则会出错的。

MySQL中的SQL拼接通常指的是构建动态SQL查询的过程。在实际应用中,这通常是根据特定条件、用户输入或者其他数据源生成的SQL语句部分需要在运行时动态组合起来。这种技术非常有用,在处理复杂的数据库操作或者根据外部信息动态调整查询需求时。 ### SQL拼接的基本步骤: 1. **确定拼接内容**:首先明确你需要在SQL语句中添加哪些元素,比如`WHERE`子句中的条件、`JOIN`子句的表名等。 2. **字符串变量准备**:将拼接的内容转换成字符串形式,并准备好用于拼接。例如,如果需要基于用户输入添加过滤条件,你可以先收集用户的输入并将其保存到字符串变量中。 3. **使用字符串连接符**:在MySQL中,可以使用单引号 `' ' ` 或双引号 `" "` 进行字符串连接。为了安全地插入值避免SQL注入,推荐使用预处理语句或者参数化查询而不是简单地将字符串拼接SQL语句中。 4. **使用预处理语句或参数化查询**:这种方式更安全,因为它自动处理了转义和输入验证的问题。例如: ```sql $stmt = $pdo->prepare("SELECT * FROM table_name WHERE column_name = :value"); $stmt->execute(['value' => $input_value]); ``` 5. **执行最终的SQL语句**:最后,通过适当的函数(如`prepare()`和`execute()`)执行拼接后的完整SQL语句。 ### 示例: 假设我们有一个表`users`,并且我们需要根据用户名筛选出用户记录。 ```php <?php // 假设$username是由用户输入得到的 $username = $_GET['username']; try { $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $query = "SELECT * FROM users WHERE username = ?"; $stmt = $pdo->prepare($query); $stmt->execute([$username]); // 输出结果 while ($row = $stmt->fetch()) { echo "ID: " . $row['id'] . ", Username: " . $row['username']; } } catch (PDOException $e) { die("Connection failed: " . $e->getMessage()); } ?> ``` 在这个例子中,我们通过PHP脚本动态地创建了一个SQL查询,并利用了PDO库的安全特性来防止SQL注入攻击。 ### 相关问题: 1. 如何在MySQL中安全地执行拼接SQL查询? 2. 预处理语句和直接字符串拼接相比有哪些优势? 3. 当处理敏感数据时,如何进一步提高SQL查询的安全性? 通过以上解答和讨论,希望你能更好地理解MySQLSQL拼接的基础知识及其安全性考虑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值