Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Скопировать строку таблицы


Автор: KonstRuctor 21.11.2011, 16:43
Всем привет!
Есть таблица с большим количеством полей. Иногда поля добавляются, иногда удаляются.
Есть скрипт, который делает только одну вещь -- точную копию записи с определенным id, присвоив строке новый id.
Сейчас я делаю так:
Код

$query = "SELECT * FROM table WHERE id = $idold"; // где $idold пришел из формы
$res = mysql_query($query);
$row = mysql_fetch_assoc($res);
// теперь вставляем данные
$query="INSERT INTO table ( поля через запятую ) VALUES ( '".$row["data1"]."', ....... )";
$res = mysql_query($query);
$idnew = mysql_insert_id(); // новый id

Существует ли какой-нибудь более элегантный способ?
При любом изменении кол-ва полей в таблице table приходится внимательно переписывать скрипт...

Автор: ksnk 21.11.2011, 16:52
Цитата(KonstRuctor @  21.11.2011,  16:43 Найти цитируемый пост)
При любом изменении кол-ва полей в таблице table приходится внимательно переписывать скрипт... 

А что делать предлагается? Если название поля изменилось - его нужно поменять и в форме.
А так можно  сделать запрос SHOW CREATE TABLE XXX и регулярками распарсить имена полей и их тип.

Автор: $дмитрий 21.11.2011, 17:05
1. Порядок полей в таблице необязательно перечислять
2. Нужно в цикле прогнать массив $row и получить готовый запрос, примерно так
Код

$sSQL = "INSERT INTO table VALUES (NULL";
$i = 0;
foreach($row as $sKey => $sValue)
{
    if(!$i){
        $i++;
        continue;
    }
    $sSQL .= ", '".mysql_real_escape_string($sValue)."'";
    $i++;
}
$sSQL .= ")";

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)