我似乎无法找出仅更新包含空值的单元格的方法。利用此语句(初始数据库更新后)将初始数据模拟到相邻单元格中,以便在数据更改时它具有基础引用。
只需要找到一种方法,只允许这些单元格更新一次。我已将它们设置为 NULL 作为默认值。每天都会将不同的数据集收集到具有唯一时间/日期 ID 的同一个表中。
$data = "http://192.168.1.1/data.xml";
$domdoc = new DOMDocument();
$domdoc ->load($data);
$xml = new Domxpath($domdoc);
$unitCount = $xml->query("//data/units")->length;
//get unit id's
$id_array = array();
$id = $xml->query('//data/units//@id');
foreach($id as $item){
array_push($id_array, $item->nodeValue);
};
for ($i=0; $i < $unitCount; $i++){
$id_db = $id_array[$i];
//get unit angle
unset($angle_array);
$angle_array = array();
$angle = $xml->query('//data/units[@id="'$id_array[$i]'"]//@angle');
foreach($angle as $item){
array_push($angle_array, $item->nodeValue);
};
//get unit speed
unset($speed_array);
$speed_array = array();
$speed = $xml->query('//data/units[@id="'$id_array[$i]'"]//@speed');
foreach($speed as $item){
array_push($speed_array, $item->nodeValue);
};
//get unit charge
unset($charge_array);
$charge_array = array();
$charge = $xml->query('//data/units[@id="'$id_array[$i]'"]//@charge');
foreach($charge as $item){
array_push($charge_array, $item->nodeValue);
};
$stmt = $dbh->prepare("REPLACE INTO `action-data` (
`id`,
`angle_start`,
`angle`,
`speed_start`,
`speed`,
`charge_start`,
`charge`
) VALUES (?,?,?,?,?,?)");
$stmt->execute(array(
$id_db,
$angle_db,
$angle_db,
$speed_db,
$speed_db,
$charge_db,
$charge_db
));
}
| id |angle_start|angle|speed_start|speed|charge_start|charge|
-------------------------------------------------------------------
| a4b | 1 | 2 | 0 | 5 | 100 | 31 |
| a4b | 3 | 7 | 0 | 4 | 95 | 29 |
| a4b | 1 | 5 | 0 | 5 | 100 | 4 |
| a4b | 3 | 4 | 0 | 2 | 97 | 36 |
^ ^ ^
\ | /
These values default NULL and
should be set once upon first input
but ignored on future inputs if not == NULL.
编辑:添加了一个示例,可以更好地说明内容、方式和原因。
最佳答案
您的数组声明中存在语法错误。另外,我知道这是挑剔的,$dbh->prepare()
的结果是一个准备好的语句,而不是SQL,所以也许重命名你的变量,这样就不会让你自己感到困惑或将来的其他开发者:
$stmt = $dbh->prepare("REPLACE INTO `action-data` (
`angle_start`,
`speed_start`,
`temp_start`,
`direction_start`,
`charge_start`
) VALUES (?,?,?,?,?)");
$stmt->execute(array(
$angle_start_db,
$speed_start_db,
$temp_start_db,
$direction_start_db,
$charge_start_db
));
如果仍然不起作用,我们可能需要查看您的 $dbh
声明以查看其配置是否正确。
关于php - 如何使用 PDO 和数组仅更新表格单元格(如果为空),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44839246/