PHP MySQL PDO : Weird looping when calculate momentum indicator

标签 php mysql pdo

我正在尝试从导入的 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/

相关文章:

javascript - 无法将标记加载到 LeafLet 中

php - 在本地使用 Composer 然后通过 FTP 上传文件

mysql - 无法使用 Sequelize 将 id 插入属于外键引用表的表中

php - PDO 不会在错误的 SQL 查询上抛出异常

javascript - 如何使用 codeigniter 在不同页面、部分实例化 require.js 模块?

php - 在子表更改时更新父表计数器

mysql - 一次向多个表添加新字段?

php - 静态数组 vs Mysql + PHP vs 通过ajax更新的XML文件

javascript - 单击 bootstrap 选项卡时运行 jquery 函数

mysql - 按动态生成的字段值的值进行选择