Метод DateTime () не работает при отображении предложения BETWEEN - Mysql / PHP - PullRequest
2 голосов
/ 13 октября 2011

У меня есть PHP-функция, которая выполняет запрос MySQL с несколькими определенными переменными.Мне нужно предложение BETWEEN оператора SQL для работы с переменными, где одной из переменных является функция DateTime().

Здесь переменная $start должна создать новое время, и тогда значение, которое я имею в моей базе данных, должно быть между этим временем и переменной $finish, которую я определил.

$start = new DateTime();

$finish = '2013-10-06 17:06:52';

$value = $this->GetOffset();

$this->db->select("esolar + $value AS Esolar", 1)
     ->from('calcdata')
     ->where('siteid', $siteid)
     ->where("time BETWEEN '$start' AND '$finish'")     
     ->where('esolar <', 1000000)
     ->where('esolar <>', 0);
$query1 = $this->db->get()->result_array();
$Esolar1 = $query1[0]['Esolar'];

Однако, когда я делаю это, я получаю эту ошибку:

Обнаружена ошибка PHP

Серьезность: 4096 Сообщение: объект класса DateTime не можетпреобразовать в строку

Спасибо

Ответы [ 4 ]

4 голосов
/ 13 октября 2011

Вы должны сделать что-то вроде:

$start = $start->format('Y-m-d H:i:s');

в противном случае вы передадите объект вместо строки в качестве параметра

2 голосов
/ 13 октября 2011

ваш $start относится к классу DateTime - вам нужно преобразовать его в строку ...

Это можно сделать с помощью метода format -> $start->format('Y-m-d H:i:s');

1 голос
/ 13 октября 2011

Это связано с тем, что для преобразования объекта DateTime в строковую форму необходимо использовать метод format () . В вашем случае это станет примерно таким:

$this->db->select("esolar + $value AS Esolar", 1)
 ->from('calcdata')
 ->where('siteid', $siteid)
 ->where("time BETWEEN '".$start->format("Y-m-d H:i:s")."' AND '".$finish->format("Y-m-d H:i:s")."'")     
 ->where('esolar <', 1000000)
 ->where('esolar <>', 0);
0 голосов
/ 13 октября 2011

Я вижу, $start не инициализируется ни для какого значения, поэтому оно содержит текущую дату / время.
Учитывая это, вы можете изменить запрос с помощью

...
time BETWEEN NOW() AND '$finish'")
...

без использования объекта DateTime

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...