2014-12-29 3 views
1

Я пытаюсь json_encode получить следующие результаты mysqli. Моя проблема заключается в том, что после добавления каждой строки в мой массив я не могу выполнить 'echo json_encode' мой массив, но я могу print_r массив. Если я добавлю ограничение к этому конкретному запросу, тогда работает echo json_encode, но этот предел равен 313. Я думал, что это указывает на проблему с ограничениями памяти php, но после изменения моего memory_limit на 256M я все же могу вернуть только то же количество данных. Я попытался найти похожие проблемы, но ничего не было достаточно близко к проблеме, с которой я столкнулся. Весь мой PHP-скрипт вставлен ниже. Любые советы приветствуются.print_r, показывая содержимое массива, но echo json_encode не

<?php 
    if(isset($_GET["table"])){ 
     // Open db connection 
     require "opendb.php"; 
     /*** $table = assay ***/ 
     $table = $_GET["table"]; 

     $query = "SELECT * FROM invitrodb_v1.{$table}"; 
     // Store results from query 
     $data = mysqli_query($conn, $query); 

     $table_row = array(); 

     while($row = mysqli_fetch_array($data)){ 
      $table_row[] = $row; 
     } 

     /** 
     * 
     *print_r displays array contents 
     *echo json_encode does not 
     * 
     **/ 
     //echo json_encode($table_row); 
     //print_r($table_row); 

     // Close db connection 
     require "closedb.php"; 
    } 
    //***342 rows returned with the assay table when not limited***// 
?> 

Редактировать: Это пример того, что я возвращаю. Для этой конкретной таблицы есть 342 строки, которые похожи на это..fyi это данные из общедоступной базы данных, найденной здесь http://www.epa.gov/ncct/toxcast/data.html (в случае, если кому-то интересно).

{ 
    "aid": "1", 
    "asid": "1", 
    "assay_name": "ACEA_T47D", 
    "assay_desc": "ACEA_T47D is a cell-based single readout assay using T47D human breast cell line at 80 hours in a 96-well plate.", 
    "timepoint_hr": "80", 
    "organism_id": "9606", 
    "organism": "human", 
    "tissue": "breast", 
    "cell_format": "cell line", 
    "cell_free_component_source": "NA", 
    "cell_short_name": "T47D", 
    "cell_growth_mode": "adherent", 
    "assay_footprint": "microplate: 96-well plate", 
    "assay_format_type": "cell-based", 
    "assay_format_type_sub": "cell-based format", 
    "content_readout_type": "simple", 
    "dilution_solvent": "DMSO", 
    "dilution_solvent_percent_max": "0.5" 
} 
+0

вы получаете какие-либо ошибки? Добавьте отчет об ошибках в начало файла (ов) сразу после открытия '

+0

@JayBlanchard Я не получаю никаких ошибок после добавления этого. Результаты все те же. –

+1

'var_dump (json_encode ($ table_row));' – AbraCadaver

ответ

2

После большой помощи от все и проверки дубликата ссылки решения было установить кодировку непосредственно после mysqli_connect($host, $username, $password).

Это было сделано путем добавления mysqli_set_charset($connection, "utf8");

Я также изменил mysqli_fetch_array() к mysqli_fetch_assoc(), который населен только ассоциативный массив, который не является решением, но был чрезвычайно полезным.

1
$table = $_GET["table"]; 
$query = "SELECT * FROM invitrodb_v1.{$table}"; 
$data = mysqli_query($conn, $query); 

Никогда не сделать это в вашем коде. Никогда. Вы можете узнать, почему здесь: http://en.wikipedia.org/wiki/SQL_injection

+0

Спасибо, что я изменил свой код на основе этого чтения и некоторого дополнительного чтения. Я продолжу работу по профилактике основных инъекций. –

0

При использовании PDO, необходимо установить кодировку utf8 так:

$dbh = new PDO("mysql:host=127.0.0.1;dbname=recycle;charset=utf8",'root',''); 
Смежные вопросы