0

ページの読み込み時にデータベースインスタンスを作成するデータベースクラスがあり、それ自体がデータベース接続を作成します。

class database{
       var $connection; 


       /* Class constructor */
       function database(){
          /* Make connection to database */
          $this->connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
          mysql_select_db(DB_NAME, $this->connection) or die(mysql_error());

このクラス内には、次のように上記の接続を使用してデータベースを照会する関数があります。

function query($query){
      return mysql_query($query, $this->connection);
}

これは、php でこのクエリ関数を 1 回使用すると正しく機能しますが、2 回目はこのクエリ関数呼び出しをループに入れますが、クエリ関数呼び出しの最初のインスタンスは null の結果セットを返します。動作しないループ コードの例を次に示します。

$chartSQL = "CALL RESEARCH.INTRA_DAY_PRICE('".$row['TICKER_I']."', 7)";
$result = $database->query($chartSQL);

これは、単純な select ステートメントではなく、MySQL ルーチンをクエリしているという事実と関係がありますか? ルーチン「INTRA_DAY_PRICE」は、指定された引数を使用する選択ステートメントであることに注意してください。ループ内で同じ接続を使用していて、連続する呼び出しごとに接続が使用されているだけなので、結果セットが null になる可能性がありますか?

編集:これがループ全体です:

$search_term = sr_addslashes($_GET['search']);
$sql = "SELECT DISTINCT t.TICKER_I, t.TICKER_C, t.TICKER_N, cpv.CURRENT_PRICE_A, cpv.MARKET_CAP, cpv.DA\
YS_CHANGE_A FROM ".DB_NAME.".TICKER_MyISAM t INNER JOIN ".DB_NAME.".CURRENT_PRICE_V cpv ON t.TICKER_I = cpv.TICKER\
_I WHERE t.INTEREST_F = 1 AND (MATCH(t.TICKER_C, t.TICKER_N) AGAINST('".$search_term."' IN BOOLEAN MODE) OR t.TICK\
ER_C = '".$search_term."' OR t.TICKER_N = '".$search_term."') LIMIT 20";

$results = $database->query($sql);


while($row = mysql_fetch_array($results)){

               //Chart

               <script type="text/javascript" src="http://www.google.com/jsapi"></script>
               <script type="text/javascript">
               google.load('visualization', '1', {packages: ['annotatedtimeline']});
               function drawVisualization() {
               var data = new google.visualization.DataTable();
               data.addColumn('date', 'Date');
               data.addColumn('number', '<?php echo $row['TICKER_C']; ?>');
               data.addRows([
               <?php
               $chartSQL = "CALL RESEARCH.INTRA_DAY_PRICE('".$row['TICKER_I']."', 7)";
               $result = $database->query($chartSQL);
               while($chartRow = mysql_fetch_array($result)){
                 echo $chartRow['FORMATTED'];
               }
               echo "null]);";
               ?>

               var annotatedtimeline = new google.visualization.AnnotatedTimeLine(document.getElementById('chart_d\
iv_<?php echo $count; ?>'));
               annotatedtimeline.draw(data, {'scaleType': 'maximized', 'displayRangeSelector': false, 'displayZoom\
Buttons': false});
               }
               google.setOnLoadCallback(drawVisualization);
               </script>
               <div id="chart_div_<?php echo $count; ?>" class="chart_div"></div>

               <?php
                   // End Chart
}
4

0 に答える 0