У меня возникла проблема при попытке визуализации некоторых данных с помощью таблицы Google google . Мой источник данных - mysql db, а php-код, который я использую для подключения к моей базе данных и получения данных, - стандартный php-код (см. Пример / раздел под названием "PHP-PDO-JSON-MySQL- Google "). Оба mysql db и php работают на VPS. Странное поведение появляется, когда я использую LIMIT в своем запросе. В частности, я могу отображать свою таблицу, только если LIMIT x с x <= 5: </p>
ОК
$result_RTI_VS_W_TABLE = $conn->query("SELECT * FROM `video_series_rank_week` ORDER BY `Year` DESC, `WeekN` DESC, `Rank` ASC LIMIT 5");
НЕ ОК
$result_RTI_VS_W_TABLE = $conn->query("SELECT * FROM `video_series_rank_week` ORDER BY `Year` DESC, `WeekN` DESC, `Rank` ASC LIMIT 8");
Обратите внимание, что запрос с LIMIT 8 работает на phpmyadmin, как и ожидалось. Итак, данные существуют. Во время некоторых экспериментов я также заметил, что запросы с различными операторами LIMIT для визуализации линейных диаграмм Google , кажется, работают правильно. Это, на мой взгляд, должно быть проблемой с таблицами, а не с запросами. Кроме того, тот же код работает на моем старом VPS.
Есть идеи, почему я получаю этот странный вывод?
код:
<head>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
// Load the Visualization API and the table package.
google.charts.load('current', {'packages':['table']});
google.charts.setOnLoadCallback(drawTable);
function drawTable() {
// Create our data table out of JSON data loaded from server.
var data_RTI_VS_W_TABLE = new google.visualization.DataTable(<?=$jsonTable_RTI_VS_W_TABLE?>);
// Instantiate and draw our chart, passing in some options.
// Do not forget to check your div ID
var table_RTI_VS_W_TABLE = new google.visualization.Table(document.getElementById('table_div_RTI_VS_W_TABLE'));
table_RTI_VS_W_TABLE.draw(data_RTI_VS_W_TABLE, {showRowNumber: false, width: '100%', height: '100%'});
}
</script>
</head>
Запрашиваемая дополнительная информация :
<?php
try {
/* Establish the database connection */
$conn = new PDO("mysql:host=localhost;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
/* select relevant info for table googlechart */
$result_RTI_VS_W_TABLE = $conn->query("SELECT * FROM `video_series_rank_week` ORDER BY `Year` DESC, `WeekN` DESC, `Rank` ASC LIMIT 8");
$rows_RTI_VS_W_TABLE = array();
$table_RTI_VS_W_TABLE = array();
$table_RTI_VS_W_TABLE['cols'] = array(
/* Labels for your chart, these represent the column titles */
array('label' => 'Rank', 'type' => 'number'),
array('label' => 'Year', 'type' => 'string'),
array('label' => 'WeekN', 'type' => 'number'),
array('label' => 'Series Name', 'type' => 'string'),
array('label' => 'Total Historical Constrained Ad Avails', 'type' => 'number')
);
/* Extract the information from $result */
foreach($result_RTI_VS_W_TABLE as $r_RTI_VS_W_TABLE) {
$temp_RTI_VS_W_TABLE = array();
/* the following line will be used to get a table */
$temp_RTI_VS_W_TABLE[] = array('v' => (int) $r_RTI_VS_W_TABLE['Rank']);
/* Values */
$temp_RTI_VS_W_TABLE[] = array('v' => (string) $r_RTI_VS_W_TABLE['Year']);
$temp_RTI_VS_W_TABLE[] = array('v' => (int) $r_RTI_VS_W_TABLE['WeekN']);
$temp_RTI_VS_W_TABLE[] = array('v' => (string) $r_RTI_VS_W_TABLE['Series Name']);
$temp_RTI_VS_W_TABLE[] = array('v' => (int) $r_RTI_VS_W_TABLE['Total Historical Constrained Ad Avails']);
$rows_RTI_VS_W_TABLE[] = array('c' => $temp_RTI_VS_W_TABLE);}
$table_RTI_VS_W_TABLE['rows'] = $rows_RTI_VS_W_TABLE;
/* convert data into JSON format */
$jsonTable_RTI_VS_W_TABLE = json_encode($table_RTI_VS_W_TABLE);
} catch(PDOException $e) {echo 'ERROR: ' . $e->getMessage();}
?>
ОБНОВЛЕНИЕ :
После некоторых других экспериментов я обнаружил, что моя проблема строго связана с строковой природой поля "Имя серии", т.е.
array('label' => 'Series Name', 'type' => 'string')
Это похоже на то, что таблица Google не может отображать этот столбец после 5-й строки. Если я действительно уроню этот столбец, у меня больше не будет проблем. Идеи ???
Спасибо заранее.
Дриго
решаемые
Я должен был добавить:
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
моему новому PDO.
$conn = new PDO("mysql:host=localhost;dbname=$dbname", $username, $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));