| 
<?php
 namespace queasy\db\query;
 
 use PDO;
 
 class UpdateQuery extends TableQuery
 {
 private $fieldName;
 
 private $fieldValue;
 
 public function __construct(PDO $pdo, $tableName, $fieldName = null, $fieldValue = null)
 {
 parent::__construct($pdo, $tableName);
 
 $this->fieldName = $fieldName;
 
 $this->fieldValue = is_array($fieldValue)
 ? array_unique($fieldValue)
 : $fieldValue;
 }
 
 public function run(array $params = array(), array $options = array())
 {
 $paramsString = implode(
 ', ',
 array_map(
 function($paramName) {
 return sprintf('`%s` = :%s', $paramName, $paramName);
 },
 array_keys($params)
 )
 );
 
 $conditionString = '';
 if (null !== $this->fieldName) {
 if (is_array($this->fieldValue)) {
 $fieldValueParams = array();
 for ($i = 1; $i <= count($this->fieldValue); $i++) {
 $fieldValueParams[':' . $this->fieldName . '_queasydb_' . $i] = $this->fieldValue[$i - 1];
 }
 
 $conditionString = sprintf(
 '`%s` IN (%s)',
 $this->fieldName,
 implode(', ', array_keys($fieldValueParams))
 );
 
 $params = array_merge($params, $fieldValueParams);
 } else {
 $conditionString = sprintf(
 '`%s` = :%s',
 $this->fieldName,
 $this->fieldName . '_queasydb' // Add a suffix to avoid collision with parameters passed to SET clause
 );
 
 $params[':' . $this->fieldName . '_queasydb'] = $this->fieldValue;
 }
 }
 
 $sql = sprintf('
 UPDATE  `%s`
 SET     %s
 %s',
 $this->tableName(),
 $paramsString,
 empty($conditionString)
 ? ''
 : 'WHERE   ' . $conditionString
 );
 
 $this->setSql($sql);
 
 return parent::run($params, $options);
 }
 }
 
 
 |