<?php 
 
namespace queasy\db\query; 
 
class SelectQuery extends TableQuery 
{ 
    /** 
     * Execute SQL query and return selected row or null. 
     * 
     * @param array $params Query parameters 
     * 
     * @return array|null Row or null if row does not exist 
     * 
     * @throws DbException On error 
     */ 
    public function run(array $params = array(), array $options = array()) 
    { 
        $sql = sprintf(' 
            SELECT  * 
            FROM    `%s`', 
            $this->tableName() 
        ); 
 
        $paramKeys = array_keys($params); 
        $paramValues = array_values($params); 
 
        if (count($paramKeys)) { 
            if (is_array($paramValues[0]) && (1 < count($paramValues[0]))) { 
                $values = $paramValues[0]; 
 
                $params = []; 
                for ($i = 1; $i <= count($values); $i++) { 
                    $params[':' . $paramKeys[0] . '_' . $i] = $values[$i - 1]; 
                } 
 
                $sql = sprintf(' 
                    %s 
                    WHERE   `%s` IN (%s)', 
                    $sql, 
                    $paramKeys[0], 
                    implode(', ', array_keys($params)) 
                ); 
            } else { 
                if (is_array($paramValues[0])) { 
                    $params[$paramKeys[0]] = array_shift($paramValues[0]); 
                } 
 
                $sql = sprintf(' 
                    %s 
                    WHERE   `%s` = :%2$s', 
                    $sql, 
                    $paramKeys[0] 
                ); 
            } 
        } 
 
        $this->setSql($sql); 
 
        return parent::run($params, $options); 
    } 
} 
 
 
 |