我正在尝试根据您传递给函数的表,列和匹配变量创建一个复制行的函数。我基本上插入一个空行并获取该行的ID,然后用新信息更新它。我遇到的问题是有时候表有一个唯一的密钥,所以我得到了很多关键错误的重复条目。
在行更新之前,我检查它是否是一个具有唯一键的列,如果是这样只是为了插入一个空白,但这仍然无法正常工作。有没有办法让它为该列生成一个随机值,直到用户更改它?
以下是重复功能的代码:
public function duplicateRecord($table, $column, $record) {
$dbcon = mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
$query = "SELECT * FROM {$table} WHERE {$column} = '{$record}'";
$describe_query = "DESCRIBE {$table}";
$describe_result = mysqli_query($dbcon,$describe_query);
$unique_arr = array();
while($row = mysqli_fetch_assoc($describe_result)) {
if ($row['Key'] == 'PRI' || $row['Key'] == 'UNI') {
$unique_arr[] = $row['Field'];
}
}
$result = mysqli_query($dbcon, $query);
$original = mysqli_fetch_assoc($result);
$insert_query = "INSERT INTO {$table} (`{$column}`) VALUES (NULL)";
mysqli_query($dbcon, $insert_query);
$newid = mysqli_insert_id($dbcon);
$update_query = "UPDATE {$table} SET ";
foreach ($original as $key => $value) {
if ($key != $column) {
if (in_array($key,$unique_arr)) {
$update_query .= "{$key} = NULL, ";
} else {
$update_query .= "{$key} = '{$value}', ";
}
}
}
$update_query = substr($update_query,0,strlen($update_query)-2);
$update_query .= " WHERE {$column} = '{$newid}'";
echo $update_query;
mysqli_query($dbcon, $update_query);
return $newid;
}
非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
基本上我最终做的只是使用表名的md5和新的id生成一个10字符的子字符串,我只是作为填充符插入,这样如果用户多次复制同一行,那里将始终是插入的唯一值。
虽然,如果有人知道更优雅的解决方案,我总是乐于接受建议。 :)
if (in_array($key,$unique_arr)) {
$unique = md5($table.$newid);
$unique = substr($unique,0,10);
$update_query .= "{$key} = '{$unique}', ";
}