2015-02-01 5 views
3

У меня странная проблема. У меня есть простой PHP-скрипт, который использует PDO для получения всех стран из базы данных, а затем возвращает результат как json. Когда я использую функцию fetch вместо fetchAll, все работает так, как ожидалось. Когда я печатаю_r, данные там.PHP PDO fetchAll тогда json_encode не работает

Не работает:

$sql = "SELECT * FROM countries"; 
if($stmt = $_db->prepare($sql)) 
{ 
    $stmt->execute(); 
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC); 
    $stmt->closeCursor(); 

    header("content-type:application/json"); 

    echo json_encode($data); 
    exit(); 

} 

Работы:

$sql = "SELECT * FROM countries"; 
if($stmt = $_db->prepare($sql)) 
{ 
    $stmt->execute(); 
    $data = $stmt->fetch(PDO::FETCH_ASSOC); 
    $stmt->closeCursor(); 

    header("content-type:application/json"); 

    echo json_encode($data); 
    exit(); 

} 

Результаты print_r:

Array 
(
[0] => Array 
    (
     [id] => 1 
     [name] => Afghanistan 
    ) 

[1] => Array 
    (
     [id] => 2 
     [name] => Åland Islands 
    ) 

[2] => Array 
    (
     [id] => 3 
     [name] => Albania 
    ) 
.... 
[248] => Array 
    (
     [id] => 249 
     [name] => Zimbabwe 
    ) 

) 
1 
+0

Что делает первый код? Каким фрагментом кода является 'print_r'? Это одно и то же? – andrewsi

+0

fetch() должен возвращать только следующую строку результата ... – thedouglenz

+0

Как вы можете видеть, fetch() и fetchAll() возвращают разные наборы данных. Трудно сказать, что вы просите. –

ответ

-1

fetchall документация говорит получает массив всех извлекающих данных одновременно в нуль. В этом случае, кажется, ваша функция fetchall назначила массив результатов в arraylist.

Вот ссылка ссылка ниже,

PDO fetch/fetchAll

5

попробовать

$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 

С:

array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") 
+0

это мое спасение! спасибо ....; charset = utf8 –

+0

im, используя новый PDO ('firebird: dbname ='. $ dados_sql ['ip']. ':'. $ dados_sql ['alias']. '; charset = utf8', $ pwEuser ['pw'], $ pwEuser ['user']); и FECH_ASSOC, а не FETCH_OBJ –

3

Если у вас есть проблемы с JSON, есть функция json_error() ,

Узнав, что существует проблема с кодировкой, скажите вашу базу данных для возврата данных в utf8:

$_db->query("SET NAMES utf8"); 
$data = $_db->query("SELECT * FROM countries")->fetchAll(PDO::FETCH_ASSOC); 

header("content-type:application/json"); 
echo json_encode($data); 
exit(); 
1

Попробуйте настроить кодировку при инициализации PDO, как этот

$_db = new PDO("mysql:host=$host;dbname=$dbname;charset=UTF8;", $dbuser, $dbpass); 

Примечание конец от первого параметра выше charset=UTF8;

Смежные вопросы