2014-12-25 3 views
-1

Я пытаюсь добиться чего-то очень простого. Прочитайте подробности праздников из таблицы holidays с сегодняшнего дня до конца следующего года и покажите результат как var_dump массива ассоциативных массивов (дело в том, что как только он работает, я хочу иметь возможность json_encode()). Хотя в таблице есть строка, мой код возвращает пустой массив array(0){}. Может кто-нибудь сказать, что случилось?Пустой массив, считающийся из базы данных

<?php 
//test file 

//Database details 
$db_host = 'localhost'; 
$db_name = 'hrmsbb'; 
$db_username = 'root'; 
$db_password = ''; 

//connect to database 
$conn = new mysqli($db_host, $db_username, $db_password, $db_name); 

if ($conn->connect_error) { 
    die("Connection error"); 
} 

//Show holidays from tomorrow upto the end of next year 
$d = new DateTime('tomorrow'); 
$date_begin = $d->format('Y-m-d'); 

$d->add(new DateInterval('P1Y')); //add difference of one year 
$y = $d->format('Y'); //get resulting year 
$date_end = "$y-12-31"; //construct date 

$query = $conn->prepare("SELECT holiday_id, name, date, value, comments FROM holidays 
     WHERE date BETWEEN ? AND ? ORDER BY date ASC"); 

$query->bind_param("ss", $date_begin, $date_end); 

$result = $query->execute(); 

if($result === false) { //query failed 
    die("Failed to query database"); 
} 

$query->bind_result($id, $name, $date, $value, $comments); 

//return results as array of objects 
$data = array(); 

while($query->fetch()) { 
    $data[] = array('id' => $id, 'name' => $name, 'date' => $date, 
       'value' => $value, 'comments' => $comments); 
} 

echo "<pre>"; 
var_dump($data); 
echo "</pre>"; 
+5

Очевидно, что ваш запрос ничего не возвращает. Это означает, что ваш запрос неверен. Вы пробовали его непосредственно на mysql - через консоль или phpmyadmin? –

+0

@u_mulder А, какой я идиот! Существующие даты в таблице были вне этого диапазона. : P – dotslash

ответ

0

Ответ на вопрос, чтобы его можно было закрыть. Я был неаккуратен и не видел, что на столе фактически не было данных, которые могли бы соответствовать запросу.

0

Try запрос ниже вместо BETWEEN:

$query = $conn->prepare("SELECT holiday_id, name, date, value, comments FROM holidays 
     WHERE date > ? AND date < ? ORDER BY date ASC"); 

Кстати, я не думаю, что вы можете использовать «дату» в качестве имени столбца в таблице в MYSQL! Это из-за слова «дата» - это ключевое слово в mySql.

+0

Запрос работал в конечном итоге; там только что не было строк в диапазоне дат, когда я опубликовал. И, кстати, в качестве имени столбца можно использовать 'date', хотя это ключевое слово. – dotslash