在PHP中为mysql创建重复的行函数

时间:2014-12-03 13:55:52

标签: php mysql

我正在尝试根据您传递给函数的表,列和匹配变量创建一个复制行的函数。我基本上插入一个空行并获取该行的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;

    }

非常感谢任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

基本上我最终做的只是使用表名的md5和新的id生成一个10字符的子字符串,我只是作为填充符插入,这样如果用户多次复制同一行,那里将始终是插入的唯一值。

虽然,如果有人知道更优雅的解决方案,我总是乐于接受建议。 :)

if (in_array($key,$unique_arr)) {

    $unique = md5($table.$newid);
    $unique = substr($unique,0,10);

    $update_query .= "{$key} = '{$unique}', ";

}