Код: Выделить всё
class DB
{
private static $_instance=null;
private $_pdo, $_query, $_error=false, $_result, $_count=0, $_lastInsertId=null;
private function __construct()
{
try
{
$this->_pdo=new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD);
}
catch(PDOException $e)
{
die($e->getMessage());
}
}
public static function getInstance()
{
if(!isset(self::$_instance))
{
self::$_instance=new DB();
}
return self::$_instance;
}
public function first()
{
return (!empty($this->_result))?$this->_result[0]:[];
}
public function query($sql, $params=[])
{
$this->_error=false;
if($this->_query=$this->_pdo->prepare($sql))
{
$x=1;
if(count($params))
{
foreach($params as $param)
{
$this->_query->bindValue($x, $param);
$x++;
}
}
if($this->_query->execute())
{
$this->_result=$this->_query->fetchALL(PDO::FETCH_OBJ);
$this->_count=$this->_query->rowCount();
$this->_lastInsertId=$this->_pdo->lastInsertId();
}
else
{
$this->_error=true;
}
}
return $this;
}
protected function _read($table, $params=[])
{
$conditionString='';
$bind=[];
$order='';
$limit='';
if(isset($params['conditions']))
{
if(is_array($params['conditions']))
{
foreach($params['conditions'] as $condition)
{
$conditionString.=' '.$condition.' AND';
}
$conditionString=trim($conditionString);
$conditionString=rtrim($conditionString, ' AND');
}
else
{
$conditionString=$params['conditions'];
}
if($conditionString!='')
{
$conditionString=' WHERE '.$conditionString;
}
}
if(array_key_exists('bind', $params))
{
$bind=$params['bind'];
}
if(array_key_exists("order", $params ))
{
$order=' ORDER BY '.$params['order'];
}
if(array_key_exists("limit", $params ))
{
$limit=' LIMIT '.$params['limit'];
}
$sql="SELECT * FROM {$table} {$conditionString} {$order} {$limit}";
if($this->query($sql, $bind))
{
if(!count($this->_result))
return false;
else
return true;
}
return false;
}
public function findFirst($table, $params)
{
if($this->_read($table, $params))
{
return $this->first();
}
else
return false;
}
}
Итак, у нас есть метод _read(), который создает запрос Select. Метод _read() получает имя таблицы и выбирает предложения запроса в качестве аргументов. Метод query(), который запускает запрос, созданный методом _read(). Также метод findFirst() возвращает первую запись в наборе результатов запроса на выборку.
Таблица user_sessions имеет следующую структуру
Код: Выделить всё
______ ______________________________
| id | user_id| session |user_agent|
Код: Выделить всё
$db=new DB("some_table_name");
$db->findFirst("user_sessions", ['conditions'=>'user_agent= ? AND session= ?',
'bind'=>[Session::uagent_no_version(), Cookie::get(REMEMBER_ME_COOKIE_NAME)]]);
Код: Выделить всё
SELECT * FROM user_sessions WHERE user_name=? AND session=?
Код: Выделить всё
Show Columns
Я пытался проверить, какой SQL-запрос строит метод _read(). Запрос выбора построен, как и ожидалось. Но когда метод query() вызывается из метода _read(), вместо запроса SELECT запускается запрос «Показать столбцы из user_sessions».
Я хочу знать, почему запрос select заменяется на показать запрос столбцов
Подробнее здесь: https://stackoverflow.com/questions/790 ... or-another
Мобильная версия