Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: аналог Sql-евого Update на Php
Форум программистов > Интернет и сети > Web-программирование > PHP программирование
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() - неработает.
руки опускаются..
заранее благодарен
Andrew Stephanoff
а dbf - формат позволяет выполнять команды SQL? если да, то возможно лучше через SQL-команду обновлять..
--
возможно переменная $row принимает в себя не массив, а строку из элементов, которую нужно преобразовать в массив через explode()
Серёга
Для: Andrew Stephanoff
Цитата(Andrew Stephanoff @ 20:06:2005, 08:31 )
а dbf - формат позволяет выполнять команды SQL? если да, то возможно лучше через SQL-команду обновлять..
*

насколько я знаю не может.
но с dbf не работал серьезно никогда
Andrew Stephanoff
посмотрел еще раз..
dbase_get_record() взвращает массив, так что тут все ок..
1) for($cntr=1;$cntr<$n;$cntr++) -- неверно, поледнюю запись не обработает, надо for($cntr=1;$cntr<=$n;$cntr++);
2)
Цитата
// ..меняем в ньом первий елемент масива на і-тий
unset($row[0]);
$row[0] = $cntr." ";
// делаем реплейс..
dbase_replace_record($dbf,$row,$cntr) or die("replase is not complit<br>\n");

а если первое поле является численным? ты в него подставляешь строку $cntr." ", но, возможно, там необходимо хранить только числовые значения поля, проверь..
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);
}

?>
Lucky.NET
dbf-формат позволяет работать со стандартными скл-запросами, но посредством ОДБС - создавая DSN. но етот вариант меня не устраивает. последний пост полностю решает мою проблему, за что и благодарен smile.gif
Lucky.NET
Цитата
Тут все просто - просто в массиве есть лишнее поле 'deleted', чтобы его убрать делать надо так:
$row = dbase_get_record_with_names($db, 1);
unset($row['deleted']);


а я делал так
$row = dbase_get_record($dbf, $cntr);
unset($row[0]);
- по сути - это одно и тоже, тока твой вариант - именованое обращение, мой - нумерованое
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.