Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用PDO和数组仅在null时更新表单元格_Php_Mysql_Pdo_Mariadb - Fatal编程技术网

Php 如何使用PDO和数组仅在null时更新表单元格

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); $

我似乎无法找到一种方法来只更新包含空值的单元格。利用此语句(初始数据库更新后)将初始数据模拟到相邻单元中,以便在数据更改时具有基本引用

只需要找到一种方法,只允许这些单元格更新一次。我已经将它们设置为默认值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.   
$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时才更新所有值。