Php 如何使用PDO和数组仅在null时更新表单元格
我似乎无法找到一种方法来只更新包含空值的单元格。利用此语句(初始数据库更新后)将初始数据模拟到相邻单元中,以便在数据更改时具有基本引用 只需要找到一种方法,只允许这些单元格更新一次。我已经将它们设置为默认值NULL。每天将不同的数据集收集到具有唯一时间/日期id的同一个表中Php 如何使用PDO和数组仅在null时更新表单元格,php,mysql,pdo,mariadb,Php,Mysql,Pdo,Mariadb,我似乎无法找到一种方法来只更新包含空值的单元格。利用此语句(初始数据库更新后)将初始数据模拟到相邻单元中,以便在数据更改时具有基本引用 只需要找到一种方法,只允许这些单元格更新一次。我已经将它们设置为默认值NULL。每天将不同的数据集收集到具有唯一时间/日期id的同一个表中 $data = "http://192.168.1.1/data.xml"; $domdoc = new DOMDocument(); $domdoc ->load($data); $
$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.
$data=”http://192.168.1.1/data.xml";
$domdoc=新的DOMDocument();
$domdoc->load($data);
$xml=新的Domxpath($domdoc);
$unitCount=$xml->query(“//数据/单位”)->长度;
//获取单位id
$id_array=array();
$id=$xml->query('//data/units//@id');
foreach($id作为$item){
数组推送($id\u数组,$item->nodeValue);
};
对于($i=0;$i<$unitCount;$i++){
$id_db=$id_数组[$i];
//获取单位角
未设置($angle_数组);
$angle_array=array();
$angle=$xml->query('//data/units[@id=“'$id_数组[$i]'”]/@angle');
foreach($角度作为$项目){
数组推送($angle\u array,$item->nodeValue);
};
//获得单位速度
unset($speed_数组);
$speed_array=array();
$speed=$xml->query('//data/units[@id=“'$id_数组[$i]”“]/@speed”);
foreach($speed as$项目){
数组推送($speed\u数组,$item->nodeValue);
};
//收取单位费用
未设置($charge_数组);
$charge_array=array();
$charge=$xml->query('//data/units[@id=“'$id_数组[$i]'”]/@charge');
foreach(按$item收费){
阵列推送($charge\u array,$item->nodeValue);
};
$stmt=$dbh->prepare(“替换为`action data`”(
`id`,
`角度_开始`,
`角度`,
`启动速度`,
`速度`,
`充电启动`,
`冲锋`
)数值(?,,,,,,,?)”;
$stmt->execute(数组)(
$id_db,
$angle_db,
$angle_db,
$speed_db,
$speed_db,
$charge_db,
$charge\u db
));
}
|id |角度|角度|速度|启动|速度|充电|启动|充电|
-------------------------------------------------------------------
|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|
^ ^ ^
\ | /
这些值默认为NULL和
应在第一次输入时设置一次
但如果不==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
,看看它是否配置正确。我不知道PDO是如何工作的,但我只是在一些地方读了一些内容,所以我只是给您提示,在NULL上使用PDO进行更新
$stmt = $dbh->prepare('UPDATE `access_users` SET `contact_first_name` = :firstname, `contact_surname` = :surname, `contact_email` = :email, `telephone` = :telephone WHERE `user_name` = :user_name');
$stmt->bindValue(':param', null, PDO::PARAM_INT);
发布一些示例数据和您的预期结果。谢谢,试图澄清我希望实现的目标。由于缺少文档,我认为我使用的方法完全是错误的。谢谢你的提示!我删掉了很多语句,使其简短,并在其中留下了一个逗号。只是寻找一种方法,仅当当前值为NULL时才更新所有值。