Php 正在复制行,丢失空值

Php 正在复制行,丢失空值,php,mysql,foreach,Php,Mysql,Foreach,我有这个工作,它将复制行,然后将新行链接到前一行 我的问题是复制空值。当我运行此命令时,所有空值都会作为空白进入新行 如果该值最初为NULL,我如何让它将其更改为NULL $result = $mysqli->query("SELECT * FROM rdpricing WHERE psid = '$dupsid';"); if($result->num_rows >= "1"){ $count = $result->num_rows; $cols = arra

我有这个工作,它将复制行,然后将新行链接到前一行

我的问题是复制空值。当我运行此命令时,所有空值都会作为空白进入新行

如果该值最初为NULL,我如何让它将其更改为NULL

    $result = $mysqli->query("SELECT * FROM rdpricing WHERE psid = '$dupsid';"); 
if($result->num_rows >= "1"){
$count = $result->num_rows;
$cols = array();
$result = $mysqli->query("SHOW COLUMNS FROM rdpricing");

while ($r = $result->fetch_array(MYSQLI_ASSOC)) {
if (!in_array($r["Field"], array("rdpid", "psid", "rdold"))) { //Excluding these columns
    $cols[] = $r["Field"];
    }
}

// Build and do the insert
$result = $mysqli->query("SELECT * FROM rdpricing WHERE psid = '$dupsid';"); 

while ($r = $result->fetch_array(MYSQLI_ASSOC)) {

$insertSQL = "INSERT INTO rdpricing (" . implode(", ",$cols) . ", rdold) VALUES ("; 
$count = count($cols);

foreach($cols as $counter=>$col) {

**// This is where I Believe it needs to happen, and what I have attempted, and it is NOT working**

    if(empty($r[$col]) || is_null($r[$col]) || $r[$col] == ""){
        $r[$col] = NULL;
    }

    $insertSQL .= "'" . $mysqli->real_escape_string($r[$col]) . "'";
    if ($counter < ($count - 1)) {
        $insertSQL .= ", ";
    }
 } // END foreach

 $insertSQL .= ", '".$r["rdpid"]."');";

 $mysqli->query($insertSQL);
 if ($mysqli->affected_rows < 1) {
 printf("%s\n", $mysqli->error);
} else {
}
$new_id = $mysqli->insert_id;

$statement = $mysqli->prepare("UPDATE rdpricing SET `psid`=? WHERE `rdpid`=?");
        $statement->bind_param('ss', $new_psid, $new_id);
        // Execute the prepared query.
        $statement->execute();
        $statement->close();
}

}

根据评论中的信息生成:

#reset/create  before the foreach, create an empty array
$insertSQLValues=array();


#in the foreach do some on given type 
if(is_null($r[$col])){#real null
    $r[$col] = "null";
} else if (empty($r[$col]) || $r[$col] == ""){#empty values
    $r[$col] = "''";
} else {#standart data
    $r[$col] = "'".$mysqli->real_escape_string($r[$col])."'";
}
$insertSQLValues[]=$r[$col];


#later
$insertSQL .= implode(', ',$insertSQLValues).", '".$r["rdpid"]."');";

希望您可以将其合并到代码中。

注意:是否可以这样做:插入到rdpricing中,从rdpricing中选择col1、col2、col3,其中psid='$dupsid';唯一的问题是,我实际上是在复制购物车。对于大约20种不同的产品类型,有50多列都是不同的,这是实现这些功能的基本方法;但是后来,“$value.”但是真正的null必须是$value没有引号的,例如value null,null,null不是值'null','null','null','null'嘿,我也尝试过删除顶部部分并执行$insertSQL.=empty$r[$col]| | is_null$r[$col]| |$r[$col]==?NULL还尝试了NULL以获得良好的度量值:'$mysqli->real_escape_string$r[$col];还是没什么,太完美了。就像我需要退后一步,重新审视这件事一样!非常感谢你!