Php 正在复制行,丢失空值
我有这个工作,它将复制行,然后将新行链接到前一行 我的问题是复制空值。当我运行此命令时,所有空值都会作为空白进入新行 如果该值最初为NULL,我如何让它将其更改为NULLPhp 正在复制行,丢失空值,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
$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];还是没什么,太完美了。就像我需要退后一步,重新审视这件事一样!非常感谢你!