拼接sql语句参数绑定

Posted 桥洞下的程序猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拼接sql语句参数绑定相关的知识,希望对你有一定的参考价值。

 /**
* 事务封装方法
* @access public
* @param array $sqls 要执行的sql数组或语句
* @return boolean
*/
public function transExecuteSql($sqls, $vals) {
try {
$this->startTrans();
if (is_array($sqls)) {
foreach ($sqls as $k => $sql) {
if (!isNull($vals)) {
foreach ($vals[$k] as $valKey => $val) {
$sql = $this->bindParam($sql, $valKey + 1, $val);
}
}

$result = $this->db->execute($sql);
if ($result === false) {//update 数据和原来如果一样的话返回的是0
// if(!$result)
$this->rollBack();
return false;
}
}
} else {
$result = $this->db->execute($sqls);
if (!$result) {
$this->rollBack();
return false;
}
}
$this->commit();
return true;
} catch (\Exception $e) {
$this->rollBack();
//
$sxLog = new \Org\Log\SXLog();
$sxLog->recordSqlLogger($e);
return false;
}
}

/**
* 绑定参数过程
*
* @param string $sql SQL语句
* @param int $location 问号位置
* @param mixed $var 替换的变量
* @param string $type 替换的类型
*/
public function bindParam(&$sql, $location, $var, $type = ‘STRING‘) {
switch ($type) {
//字符串
default: //默认使用字符串类型
case ‘STRING‘ :
$var = addslashes($var); //转义
$var = "‘" . $var . "‘"; //加上单引号.SQL语句中字符串插入必须加单引号
break;
case ‘INTEGER‘ :
case ‘INT‘ :
$var = (int) $var; //强制转换成int
//还可以增加更多类型..
}
//寻找问号的位置
//for ($i=1, $pos = 0; $i<= $location; $i++) {
$pos = strpos($sql, ‘?‘, $location + 1);
//}
//替换问号
$sql = substr($sql, 0, $pos) . $var . substr($sql, $pos + 1);

return $sql;
}







































































以上是关于拼接sql语句参数绑定的主要内容,如果未能解决你的问题,请参考以下文章

将参数绑定到部分SQL语句

带有绑定参数的预处理语句优于带有转义/引用参数的插值语句的原因

关于SQL注入与防注入

循环内 PDO 语句的绑定参数

sqlalchemy : 使用参数绑定执行原始 sql

了解 PDO 准备好的语句和绑定参数