ページの読み込み時にデータベースインスタンスを作成するデータベースクラスがあり、それ自体がデータベース接続を作成します。
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
}