Ошибка таблицы Google с запросом, содержащим LIMIT - PullRequest
0 голосов
/ 21 мая 2019

У меня возникла проблема при попытке визуализации некоторых данных с помощью таблицы 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"));
...