аналог Sql-евого Update на Php

Тема в разделе "PHP программирование", создана пользователем Lucky.NET, 16 июн 2005.

Статус темы:
Закрыта.
  1. Lucky.NET

    Lucky.NET Гость

    привет. вопрос по пхп: привожу код с коментами
    в двух словах есть некие данные в дбф-файле. цель - заменить даные первого поля (номерация запесей) масивом [1,2,3...dbase_numrecords($dbf))]
    // перенумеровуeмо поточну базу даних

    // откриваем файл RW - режим = "2"
    $dbf = dbase_open($dbname,2);
    $n = dbase_numrecords($dbf);
    // крутим цикл от 1 до "кол-во рекордов в базе"
    for($cntr=1;$cntr<$n;$cntr++){
    // берём і-тий рекорд
    $row = dbase_get_record($dbf, $cntr);
    // ..меняем в ньом первий елемент масива на і-тий
    unset($row[0]);
    $row[0] = $cntr." ";
    // делаем реплейс..
    dbase_replace_record($dbf,$row,$cntr) or die("replase is not complit<br>\n");
    // и не работает! - видаёт replase is not complit

    виндовс ХР. пхп вершн - 4.3.11 . поддержка dbase - есть... а dbase_replace_record() - неработает.
    руки опускаются..
    заранее благодарен
     
  2. Andrew Stephanoff

    Andrew Stephanoff Гость

    а dbf - формат позволяет выполнять команды SQL? если да, то возможно лучше через SQL-команду обновлять..
    --
    возможно переменная $row принимает в себя не массив, а строку из элементов, которую нужно преобразовать в массив через explode()
     
  3. admin

    admin Well-Known Member

    Регистрация:
    8 авг 2003
    Сообщения:
    2.811
    Симпатии:
    0
    Для: Andrew Stephanoff
    <!--QuoteBegin-Andrew Stephanoff+20:06:2005, 08:31 -->
    <span class="vbquote">(Andrew Stephanoff @ 20:06:2005, 08:31 )</span><!--QuoteEBegin-->а dbf - формат позволяет выполнять команды SQL? если да, то возможно лучше через SQL-команду обновлять..
    [snapback]21319" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    насколько я знаю не может.
    но с dbf не работал серьезно никогда
     
  4. Andrew Stephanoff

    Andrew Stephanoff Гость

    посмотрел еще раз..
    dbase_get_record() взвращает массив, так что тут все ок..
    1) for($cntr=1;$cntr<$n;$cntr++) -- неверно, поледнюю запись не обработает, надо for($cntr=1;$cntr<=$n;$cntr++);
    2)
    а если первое поле является численным? ты в него подставляешь строку $cntr." ", но, возможно, там необходимо хранить только числовые значения поля, проверь..
     
  5. coba

    coba Гость

    Тут все просто - просто в массиве есть лишнее поле 'deleted', чтобы его убрать делать надо так:
    <?php

    // open in read-write mode
    $db = dbase_open('/tmp/test.dbf', 2);

    if ($db) {
    // gets the old row
    $row = dbase_get_record_with_names($db, 1);

    // remove the 'deleted' entry
    unset($row['deleted']);

    // Update the date field with the current timestamp
    $row['date'] = date('Ymd');

    // Replace the record
    dbase_replace_record($db, $row, 1);
    dbase_close($db);
    }

    ?>
     
  6. Lucky.NET

    Lucky.NET Гость

    dbf-формат позволяет работать со стандартными скл-запросами, но посредством ОДБС - создавая DSN. но етот вариант меня не устраивает. последний пост полностю решает мою проблему, за что и благодарен :D
     
  7. Lucky.NET

    Lucky.NET Гость

    а я делал так
    $row = dbase_get_record($dbf, $cntr);
    unset($row[0]);
    - по сути - это одно и тоже, тока твой вариант - именованое обращение, мой - нумерованое
     
Загрузка...
Похожие Темы - аналог Sql евого
  1. wellsun
    Ответов:
    0
    Просмотров:
    127
  2. oshmianski
    Ответов:
    7
    Просмотров:
    744
  3. DNT
    Ответов:
    13
    Просмотров:
    1.302
  4. ESWANT
    Ответов:
    0
    Просмотров:
    1.321
  5. Dragon108
    Ответов:
    6
    Просмотров:
    2.451
Статус темы:
Закрыта.

Поделиться этой страницей