2014-01-24 2 views
2

Я использую фреймворк Flight на бэкэнд для создания службы RESTful и PDO для извлечения данных с MySql.Оператор Sql возвращает null, когда на самом деле есть значение

require 'flight/Flight.php';  

Flight::route('GET /satellites', function() { 
    $sql = "SELECT * FROM satellites"; 
    try { 
     $db = getConnection(); 
     $stmt = $db->prepare($sql); 
     $stmt->execute(); 
     $stmt->setFetchMode(PDO::FETCH_ASSOC); 
     $response = json_encode($stmt->fetchAll()); 
     $db = null; 
     echo "{sucess: true, records:" . "$response" . "}"; 
    } catch (PDOException $e) { 
     echo '{"error":{"text":' . $e->getMessage() . '}}'; 
    }   
}); 

Flight::start(); 

Я получаю JSON в ответ:

{ 
    sucess: true, 
    records:[ 
     { 
      "id":"1", 
      "dates":"01.01.2007 - 01.01.2011", 
      "satellite":null, 
      null:"98.2", 
      "resolution":"15", 
      "band":"30",  
      "price":"$15" 
     } 
    ] 
} 

выше правильно, но спутник не должен быть пустым, это, безусловно, имеет значение (я проверил это через PHPMyAdmin). Также есть столбец с именем null со значением 98.2, который следует называть nadir. Почему он называется null?

BTW, тип данных спутниковых и надирских столбцов - varchar (255). Затем я изменил тип данных столбца спутника на текст, но все-таки.

+0

Что вы сверка? –

+0

utf8_general_ci –

+0

Вы проверили, есть ли проблема с 'json_encode()'? Что возвращает '$ stmt-> fetchAll()'? – ragol

ответ

1

В вашей записи есть что-то может быть скрыты символы, как ваши данные var_dump показали:

array(1) { 
[0]=> array(10) { 
    ["id"]=> string(1) "1" 
    ["dates"]=> string(23) "01.01.2007 - 01.01.2011" 
    ["satellite"]=> string(9) "SAT­7" // This 4 character is showing count 9 
    ["nadir­"]=> string(4) "98.2" 
    ["resolution"]=> string(2) "15" 
    ["band"]=> string(2) "30" 
    ["price"]=> string(3) "$15" 
} 
} 

Над "SAT7" на самом деле выглядит как 4 символов слово, но у него есть какие-то скрытые символы, var_dump показывая количество , Аналогично "nadir" имеет также скрытые символы.

Фикс выше проблемы и продолжить

Здесь выход JSON дает это:

[{ 
    "id":"1", 
    "dates":"01.01.2007 - 01.01.2011", 
    "satellite":"SAT\u00ad7", // Hidden characters in value 
    "nadir\u00ad":"98.2", // Hidden characters in field 
    "resolution":"15", 
    "band":"30", 
    "price":"$15" 
}] 
0
in getConnection(); you use 
    // You might missing this line set utf8 
    $pdoParams = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;'); 

    $params = array(
    'host' => 'localhost',  'username' => 'username', 
    'password' => 'password', 
    'dbname' => 'dbname', 
    'driver_options' => $pdoParams 
    ); 
Смежные вопросы