PHP pdo один запрос выполняется для другого [закрыто]Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 PHP pdo один запрос выполняется для другого [закрыто]

Сообщение Anonymous »

Я только начал изучать реализацию платформы MVC. По сути, у меня есть класс БД, который обертывает объекты подключения PDO или MySQLi.

Код: Выделить всё

    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|
Значение сеанса и значения user_agent сохраняются в файле cookie. Теперь, когда я пытаюсь бежать

Код: Выделить всё

      $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)]]);
Результат — ничего. Более того, когда я пытался получить точный запрос sql, метод query() получал вместо

Код: Выделить всё

       SELECT * FROM user_sessions WHERE user_name=? AND session=?
запрос,

Код: Выделить всё

       Show Columns
запрос выполняется. Механизм, который я хочу реализовать, заключается в получении первой записи в наборе результатов для определенного запроса. Однако, поскольку запрос Select заменяется запросом Show Columns, план не работает должным образом.
Я пытался проверить, какой SQL-запрос строит метод _read(). Запрос выбора построен, как и ожидалось. Но когда метод query() вызывается из метода _read(), вместо запроса SELECT запускается запрос «Показать столбцы из user_sessions».
Я хочу знать, почему запрос select заменяется на показать запрос столбцов

Подробнее здесь: https://stackoverflow.com/questions/790 ... or-another
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»