使用MySQL和PHP使用单个查询更新多行

时间:2017-11-10 15:56:45

标签: php mysql database insert

this.afDatabase.list(`data/users/${this.currentUserID}/visits/`, ref => ref.orderByChild('type').equalTo('study')).snapshotChanges().map(changes => {
  return changes.map(c => ({ key: c.payload.key, ...c.payload.val() }));})
  .take(1).subscribe(data => {


  let studys1 = [];
  let studys2 = [];

  for (let i=0; i < data.length; i++) {
    studys1.push(data[i]);

    for(let j=0; j < data[i].length; j++) {
      console.log(data[i][j]); //This not fires. I see nothing in the console
      studys2.push(data[i][j]) // Neither...
    }
  }

  console.log('Parent Length: ' + studys1.length); // Works
  console.log('Child Length: ' + studys2.length); //Always 0

});

如上所示,上述代码可以很好地将多个记录插入到表console.log('%O',data)中,而且速度非常快。

但是,我尝试使用相同的方法在完成循环之后更新。我不知道如何实现这一点。

我想要这样的事情:

<?php
$userData = array();
while (anything to create a loop) {
    $value1 = $result1_from_loop;
    $value2 = $result2_from_loop;
    $value3 = $result3_from_loop;
    $userData[] = '("'.$value1.'", "'.$value2.'", "'.$value3.'")';
} // THIS ENDS THE WHLE OR FOR LOOP

$query = 'INSERT INTO users (data1,data2,data3) VALUES' . implode(',', $userData);
mysql_query($query);
?>

我知道上面的代码并不接近正确,语法甚至是错误的。我只是粘贴它来展示我想要实现的想法。在users语句中,<?php $userData = array(); while (Loop statement) { $value1 = $result1_from_loop; $value2 = $result2_from_loop; $value3 = $result3_from_loop; $userData[] = '("'.$value1.'", "'.$value2.'", "'.$value3.'")'; } // This ends the WHLE or FOR loop $query = 'UPDATE users SET(data1,data2,data3) VALUES' . implode(',',$userData) WHERE data2=$value2 mysql_query($query); 将如何了解每个WHERE的价值?

1 个答案:

答案 0 :(得分:0)

UPDATE使用不同的格式来INSERT。对于UPDATE,您的代码应如下所示:

$query = 'UPDATE users SET data1 = $userData[0], data2 = $userData[1], data3 = $userData[2] WHERE data2=$value2';

虽然仅作为注释,但不建议使用mysql_query,因为它已被弃用(并且将在以后的PHP版本中完全删除),并且您的代码易受SQL注入攻击。我建议至少使用mysqli_query并考虑使用准备好的陈述。