我想創建一個函數,它根據你傳入函數的表,列和匹配變量重複一行。我基本上插入一個空白行並獲取該行的id,然後用新信息更新它。我遇到的問題是,有時表中有一個唯一的鍵,所以我得到了很多關鍵錯誤的重複條目。在PHP中爲mysql創建一個重複的行函數
在行更新之前,我檢查它是否是一個具有唯一鍵的列,如果是這樣,只是基本上插入一個空白,但這仍然不起作用。有沒有辦法讓它爲這個列生成一個隨機值,直到用戶改變它爲止?
這裏是我重複的功能代碼:
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;
}
任何幫助將不勝感激,謝謝。
你不能只是將此列設置爲空字符串? – Haris 2014-12-03 13:58:06
我試過了,但除非用戶進入並在再次複製之前將空字符串更新爲值,否則仍會引發錯誤。 ''''的值仍然是唯一值。 – 2014-12-03 14:00:00
我看到if($ row ['Key']'這個告訴我你有一行叫做「Key」,是否正確?如果是這樣,那麼你知道「key」是MySQL保留字,並且需要特別注意if你是不是已經這樣做了,我想「DESCRIBE」會處理這個問題。 – 2014-12-03 14:00:49