以下是基本连接:
<?php
$connect = mysql_connect('localhost', 'root', '');
if (!$connect) {
die('Could not connect to database!');
}
mysql_select_db('stockmarket', $connect);
?>
主代码读取tickerMaster.php中的每只股票,即:
YHOO(YAHOO(
F(福特(
NFLX(NETFLIX(
ADBE(ADOBE(
GE(GE(
然后,每只股票都会被读取,并在应用程序的主代码中从雅虎金融下载每只股票的历史记录这是Netflix(NFLX(文件,例如在主代码运行时创建。其他4只股票都是一样的,但数字明显不同。这是日期,开盘,高,低,收盘,成交量,调整收盘:
2015-08-14124.959999125.00123.00123.389998631900123.389999
2015-08-13120.989998125.73003119.39996123.73000315221000123.730003
2015-08-12121.470001122449997118.660004120.51000213822500120.510002
2015-08-11120.010002123.760002120.00122.799811047600122.739998
2015-08-10126.08996126.50121.510002123.02999913370600123.029999
下面的主代码将正确地为每种股票创建一个表。但是只将从上到下的第一行插入表中,而不循环通过和插入每种股票的所有行。
主代码:
<?php
include('includes/connect.php');
function createURL($ticker) {
$currentMonth = date("n");
$currentMonth = $currentMonth - 1;
$currentDay = date("j");
$currentYear = date("Y");
return "http://real-chart.finance.yahoo.com/
table.csv?s=$ticker&d=$currentMonth&e=$currentDay&f=$currentYear
&g=d&a=7&b=10&c=2015&ignore=.csv";
//Aug. 10 2015
function getCVSFile($url, $outputFile) {
$content = file_get_contents($url);
$content = str_replace(
"Date, Open, High, Low, Close, Volume, Adj Close",
"",
$content
); //above string comes with stock data
//downloaded from yahoo. I don't want
$content = trim($content);
file_put_contents($outputFile, $content);
}
function fileToDatabase($txtFile, $tableName) {
$file = fopen($txtFile, "r");
while (!feof($file)) {
$line = fgets($file);
$pieces = explode(",", $line);
$date = $pieces[0];
$open = $pieces[1];
$high = $pieces[2];
$low = $pieces[3];
$close = $pieces[4];
$volume = $pieces[5];
$adj_clo = $pieces[6];
$amount_change = $close - $open;
$percent_change = ($amount_change/$open) * 100;
$sql = "SELECT * FROM $tableName";
$result = mysql_query($sql);
if (!$result) {
$sql_2 = "CREATE TABLE $tableName (date DATE, PRIMARY KEY(date), open FLOAT, high FLOAT, low FLOAT, close FLOAT, volume INT, amount_change FLOAT, percent_change FLOAT, adj_clo FLOAT)";
mysql_query($sql_2);
}
$sql_3 = "INSERT INTO $tableName (date, open, high, low, close, volume, amount_change, percent_change, adj_clo)
VALUES ({$date}, {$open}, {$high}, {$low}, {$close}, {$volume}, {$amount_change}, {$percent_change}, {$adj_clo} )";
mysql_query($sql_3);
}
fclose($file);
}
function main() {
$mainTickerFile = fopen("tickerMaster.txt", "r");
while(!feof($mainTickerFile)) {
$companyTicker = fgets($mainTickerFile);
$companyTicker = trim($companyTicker);
$fileURL = createURL($companyTicker);
$companyTxtFile = "txtFiles/".$companyTicker."txt";
getCVSFile($fileURL, $companyTxtFile);
fileToDatabase($companyTxtFile, $companyTicker);
}
}
main();
?>
任何关于为什么只将第一行插入数据库的帮助都将不胜感激。
这是基于以上评论的总结答案:
1( 您必须检查while loops
是否在所有行上迭代。
2( 检查SQL查询中是否存在任何问题。(如果mysql_query(...)
返回false.
,则检查mysql_query
调用的返回值,并检查mysql_error
函数的返回值
3( 检查关键字date
是否可以用作mysql表中的字段名。
4( 最后,mysql_error
告诉我们,不能插入新的数据集,因为存在具有date
列(表的主键(重复值的行。如果date
的值有效,您可以检查date
为什么是0000-00-00
,或者定义另一个主键。