繁体   English   中英

在按数组更新时使用 PHP/PDO 将 NULL 设置为值

[英]Using PHP/PDO to set a NULL as value when UPDATE by array

我正在用 PDO 执行这样的 SQL 语句。

$SQL_stmt = "UPDATE `home_slides` SET main_title=?,sub_title=?,slide_type=?,photo=?,video_small=?,video_large=? WHERE `id`=1"
$DBH_stmt = $PDOcon->prepare($SQL_stmt);
$DBH_stmt->execute($_POSTData_array);

而 $_POSTData_array 是这样的

Array ( 
    [0] => PIC_Testings 
    [1] => City 
    [2] => pic 
    [3] => 88c85c6670ac164f0a97c85ce5d25211.jpg 
    [4] => null 
    [5] => null
)

问题是我无法在 db 中将 null 设为 null,将其更新为空白。 任何帮助???

更新 !

根据 Álvaro González 的评论,我尝试了 var_dump()。

var_dump() 好多了。 我需要坚持:你怎么知道你在插入时得到了 NULL 值? – 阿尔瓦罗·冈萨雷斯

// result of var_dump($_POSTData_array);
array(6) {
  [0] => string(12) "PIC Testings"
  [1] => string(5) "Citys"
  [2] => string(3) "pic"
  [3] => string(36) "88c85c6670ac164f0a97c85ce5d25211.jpg"
  [4] => string(0) ''
  [5] => string(0) ''
}

所以实际上 $_POSTData_array 中没有设置 NULL。 猜测 var_dump() 比 print_r() 验证数据要多得多。

找到了解决方案。

解决方案 1在创建数组元素时使用 array_push。

$_POSTData_array= []
if (empty($_POST[$FieldName])) {
   // $_POSTData_array[] .= `null`;   // previous method
   array_push($_POSTedData, null);    // new method
} else {
   array_push($_POSTedData, $_POST[$FieldName]);
}

解决方案二在执行PDO语句之前创建数组后使用array_map将Null设置为空白元素。

$_POSTedData_array = array_map(function($value) {
                        return $value === "" ? NULL : $value;
                     }, $_POSTedData_array);

var_dump($_POSTData_array) 的新结果; 对于这两种解决方案

array(6) {
  [0] => string(12) "PIC Testings"
  [1] => string(5) "Citys"
  [2] => string(3) "pic"
  [3] => string(36) "88c85c6670ac164f0a97c85ce5d25211.jpg"
  [4] => NULL
  [5] => NULL
}

谢谢各位的帮助。

和那些谁“downvote”我的问题,你猜怎么着! 毕竟有解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM