我正在尝试从导入的 csv 文件(股市历史数据)计算动量指标。 我制作了“momentum_data”表,其中包含“日期、关闭、Close14、Momentum”列。 我遇到的问题是使用 PDO 将我的数据从 php 插入到动量数据表中。
我所做的最接近的方法是使用以下代码:
foreach ($sql as $data) {
$tanggal = $data['Date'];
$close = $data['Close'];
$close[] = $data['Close'];
$jumlah = count($close);
$momentum= 0;
for($i=14;$i<$jumlah;$i++){
$close1 = $close[$i-14];
$momentum = $close[$i]/$close1*100;
$sql2->bindParam(':close14', $close);
$sql2->bindParam(':Date', $tanggal);
$sql2->bindParam(':close', $close1);
$sql2->bindParam(':momentum', $momentum);
$sql2->execute();}}
和查询:
$conn = new PDO('mysql:host='.$host.';dbname='.$database, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = $pdo->prepare("SELECT * FROM csv_data ORDER BY Date");
$sql->execute(); 和
$conn = new PDO('mysql:host='.$host.';dbname='.$database, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql2 = $conn->prepare("INSERT INTO momentum_data VALUES (:Date,:close,:close14,:momentum)");
数据已插入数据库,但数据根据数据所在行进行复制。 输出将如下所示
|no|data1|data2|
|1 |1 |1 |
|2 |2 |2 |
|2 |2 |2 |
|3 |3 |3 |
|3 |3 |3 |
|3 |3 |3 |
我的代码有问题吗(显然)。 任何帮助或提示将非常感激。 抱歉,英语很糟糕。
最佳答案
通过准备
查询并绑定(bind)
循环外部的参数,您只需在执行语句之前重新分配循环内的变量即可~尽管我在这里找到了变量的命名有点困惑。
$conn = new PDO('mysql:host='.$host.';dbname='.$database, $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("insert into `momentum_data` (
日期
、关闭
、close14
、动量
)值(:date、:close、:close14、 :势头 )”);
如果($stmt){
$stmt->bindParam(':date', $tanggal );
$stmt->bindParam(':close', $close1 );
$stmt->bindParam(':close14', $close );
$stmt->bindParam(':momentum', $momentum );
$sql='select * from `csv_data` order by `date`;';
$results=$conn->query( $sql );
$tmp=array();/* it was confusing having $close and $close[] */
while( $rs=$results->fetch_object() ){
$tanggal = $rs->date;
$close = $rs->close;
$tmp[] = $rs->close;
$jumlah = count( $tmp );
$momentum = 0;
for( $i=14; $i < $jumlah; $i++ ){
$close1 = $tmp[ $i-14 ];
$momentum = $tmp[ $i ] / $close1 * 100;
$stmt->execute();
}
}
}
关于PHP MySQL PDO : Weird looping when calculate momentum indicator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48250591/