分析家 发表于 2018-12-22 12:56:13

PHP YII手写带参数sql的执行

  以下是一个例子,参数sql的执行,采用绑定参数的方式,这样可以防止注入语句:
/**
* Add score, true if successful, false if failed.
* @param$userId
* @param$topicId
* @param$score
* @param$msg
*/
public function addScore($userId, $topicId, $scoreFrom, $score, $msg)
{
try
{
$curTime = date('Y-m-d H:i:s');
$sql = "insert into user_scores (user_id, topic_id, score_from, score_num, score_message, create_time) ";
$sql .= " values (:userId, :topicId, :scoreFrom, :score ,:msg, :create_time)";
$connection = Yii::app()->db;
$command=$connection->createCommand($sql);
$command->bindParam(":userId",$userId,PDO::PARAM_STR);
$command->bindParam(":topicId",$topicId,PDO::PARAM_INT);
$command->bindParam(":scoreFrom",$scoreFrom,PDO::PARAM_STR);      
$command->bindParam(":score",$score,PDO::PARAM_INT);
$command->bindParam(":msg",$msg,PDO::PARAM_STR);
$command->bindParam(":create_time",$curTime);
$rowCount=$command->execute();
if($rowCount == 1)
return true;
else
return false;
}
catch(Exception $e)
{
return false;
}   
}  

  关于PDO属性列表:
  PDO::PARAM_BOOL
  表示一个布尔类型
  PDO::PARAM_NULL
  表示一个SQL中的NULL类型
  PDO::PARAM_INT
  表示一个SQL中的INTEGER类型
  PDO::PARAM_STR
  表示一个SQL中的SQL CHAR,VARCHAR类型
  PDO::PARAM_LOB
  表示一个SQL中的large object类型
  PDO::PARAM_STMT
  表示一个SQL中的recordset类型,还没有被支持
  PDO::PARAM_INPUT_OUTPUT
  Specifies that the parameter is an INOUT parameter for a stored procedure. You must bitwise-OR this value with an explicit PDO::PARAM_* data type.
  




页: [1]
查看完整版本: PHP YII手写带参数sql的执行