dbase_add_record
The database resource, returned by dbase_open() or dbase_create() .
An indexed array of data. The number of items must be equal to the number of fields in the database, otherwise dbase_add_record() will fail.
Note:
If you’re using dbase_get_record() return value for this parameter, remember to reset the key named deleted .
Return Values
Returns true on success or false on failure.
Changelog
Examples
Example #1 Inserting a record in a dBase database
// open in read-write mode
$db = dbase_open ( ‘/tmp/test.dbf’ , 2 );
if ( $db ) dbase_add_record ( $db , array(
date ( ‘Ymd’ ),
‘Maxim Topolov’ ,
’23’ ,
‘max@example.com’ ,
‘T’ ));
dbase_close ( $db );
>
See Also
User Contributed Notes 1 note
Field type incompatible inputs can cause PHP to crash or strange errors to occur. After finding that out it was easy to fill also «big» dbase-files with size bigger than 15 MB. Don’t let your enthusiasm be broken by inexact error messages! 🙂
- dBase Functions
- dbase_add_record
- dbase_close
- dbase_create
- dbase_delete_record
- dbase_get_header_info
- dbase_get_record_with_names
- dbase_get_record
- dbase_numfields
- dbase_numrecords
- dbase_open
- dbase_pack
- dbase_replace_record
dBase Functions
Many examples in this reference require a dBase database. We will use /tmp/test.dbf that will be created in the example of dbase_create() .
Table of Contents
- dbase_add_record — Adds a record to a database
- dbase_close — Closes a database
- dbase_create — Creates a database
- dbase_delete_record — Deletes a record from a database
- dbase_get_header_info — Gets the header info of a database
- dbase_get_record_with_names — Gets a record from a database as an associative array
- dbase_get_record — Gets a record from a database as an indexed array
- dbase_numfields — Gets the number of fields of a database
- dbase_numrecords — Gets the number of records in a database
- dbase_open — Opens a database
- dbase_pack — Packs a database
- dbase_replace_record — Replaces a record in a database
User Contributed Notes 2 notes
I know lots of you dosent really use dbase, but i’ve builded a class to help the one how dose.
(sorry for bad english)set_time_limit ( 0 );
// site_path defined by parent
require_once ( SITE_PATH . ‘/server/php/libs/dbase/handler.php’ );/* DBase (dbf)
* manage dbf files, exports and search functionality
* with buildin optimizers for fast performance
*/class DBase
private $handler = false ;
private $searchopt = array (); // Search optimizerprivate function unload ()
if ( $this -> handler !== false )
unset ( $this -> handler );
>public function __construct ( $file = false )
if ( $file !== false )
$this -> load ( $file );
>public function __destruct ()
$this -> unload ();
>public function load ( $file )
$resource = dbase_open ( $file , 0 );
$this -> handler = new DBase_Handler ( $resource );/* Search
* search for string inside header
* returns record number
* false returned if not found or error occurred
* limit_results gets int or false, limit_results equels one will limit the
* search results for one result only, false for no limit
*/
public function search ( $headerText , $string , $limit_results = false , $handler = false )
if ( $handler === false )
$handler = $this -> handler ;if ( $this -> searchopt [ $headerText ][ $string ])
return $this -> searchopt [ $headerText ][ $string ];
else
$size = $handler -> getSize ();
if ( ( $headerNumber = $handler -> getHeaderNumber ( $headerText ) ) !== false )
$results = array ();
for ( $i = 1 ; $i < $size ; $i ++)
$record = $handler -> getRecord ( $i , false ); // Disabled optimizer to prevent memory overflow
if ( trim ( $record [ $headerNumber ]) == $string )
$results [] = $i ;if ( sizeof ( $results ) > 0 )
$this -> searchopt [ $headerText ][ $string ] = $results ;
return $this -> search ( $headerText , $string , $handler );
>return false ;
> else
return false ;
>
>
>/* DBase Handler (dbf)
* handles dbase resource
*/class DBase_Handler
private $resource ;
private $size ; // Records Count
private $header = array ();
private $dataopt = array (); // Data optimizerprivate function setHeader ()
$this -> header = dbase_get_header_info ( $this -> resource );
>public function __construct ( $resource )
$this -> resource = $resource ;
$this -> setHeader ();
$this -> size = dbase_numrecords ( $this -> resource );
>public function __destruct ()
dbase_close ( $this -> resource );
>public function getRecord ( $record_number , $dataopt = true )
if ( $record_number > $this -> size )
return false ;
else
if ( $this -> dataopt [ $record_number ])
return $this -> dataopt [ $record_number ];
else
$record = dbase_get_record ( $this -> resource , $record_number );
if ( $dataopt === true ) // Data saving optimizer
$this -> dataopt [ $record_number ] = $record ;
return $this -> getRecord ( $record_number );
> else
return $record ;
>
>
>public function getHeaderNumber ( $headerText )
foreach ( $this -> header as $index => $header )
if ( $header [ ‘name’ ] == $headerText )
return $index ;
break;
>
>public function getHeader ( $headerNumber )
if ( $headerNumber header ))
return $this -> header [ $headerNumber ];
else
return false ;
>public function getSize ()
return $this -> size ;
>
>dBase
Unfortunately the dbase functions are not compiled into my commercial server’s php and I needed to read some geo data in shape files, which include data in dbfs.
So maybe this will help some others:
function echo_dbf ( $dbfname ) <
$fdbf = fopen ( $dbfname , ‘r’ );
$fields = array();
$buf = fread ( $fdbf , 32 );
$header = unpack ( «VRecordCount/vFirstRecord/vRecordLength» , substr ( $buf , 4 , 8 ));
echo ‘Header: ‘ . json_encode ( $header ). ‘
‘ ;
$goon = true ;
$unpackString = » ;
while ( $goon && ! feof ( $fdbf )) < // read fields:
$buf = fread ( $fdbf , 32 );
if ( substr ( $buf , 0 , 1 )== chr ( 13 )) < $goon = false ;>// end of field list
else <
$field = unpack ( «a11fieldname/A1fieldtype/Voffset/Cfieldlen/Cfielddec» , substr ( $buf , 0 , 18 ));
echo ‘Field: ‘ . json_encode ( $field ). ‘
‘ ;
$unpackString .= «A $field [ fieldlen ] $field [ fieldname ] /» ;
array_push ( $fields , $field );>>
fseek ( $fdbf , $header [ ‘FirstRecord’ ]+ 1 ); // move back to the start of the first record (after the field definitions)
for ( $i = 1 ; $i $buf = fread ( $fdbf , $header [ ‘RecordLength’ ]);
$record = unpack ( $unpackString , $buf );
echo ‘record: ‘ . json_encode ( $record ). ‘
‘ ;
echo $i . $buf . ‘
‘ ;> //raw record
fclose ( $fdbf ); >
?>This function simply dumps an entire file using echo and json_encode, so you can tweak it to your own needs. (eg random access would just be a matter of changing the seek to : fseek($fdbf, $header[‘FirstRecord’]+1 +($header[‘RecordLength’]* $desiredrecord0based); removing the for loop and returning $record
This function doesn’t do any type conversion, but it does extract the type if you need to play with dates, or tidy up the numbers etc.
So quick and dirty but maybe of use to somebody and illustrates the power of unpack.
dbase_add_record
Ресурс базы данных, возвращаемый функцией dbase_open() или dbase_create() .
Индексированный массив с данными. Количество элементов должно быть равно числу полей в базе данных, в противном случае dbase_add_record() не удастся выполнить.
Замечание:
Если вы используете в качестве параметра запись, которую вернула функция dbase_get_record() , не забудьте сбросить ключ deleted . (прим пер. — unset(record[‘deleted’]);
Возвращаемые значения
Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.
Список изменений
Примеры
Пример #1 Вставка записи в базу данных dBase
// открыть БД в режиме чтения и записи
$db = dbase_open ( ‘/tmp/test.dbf’ , 2 );if ( $db ) dbase_add_record ( $db , array(
date ( ‘Ymd’ ),
‘Maxim Topolov’ ,
’23’ ,
‘max@example.com’ ,
‘T’ ));
dbase_close ( $db );
>Смотрите также
User Contributed Notes 1 note
Field type incompatible inputs can cause PHP to crash or strange errors to occur. After finding that out it was easy to fill also «big» dbase-files with size bigger than 15 MB. Don’t let your enthusiasm be broken by inexact error messages! 🙂
- dBase
- dbase_add_record
- dbase_close
- dbase_create
- dbase_delete_record
- dbase_get_header_info
- dbase_get_record_with_names
- dbase_get_record
- dbase_numfields
- dbase_numrecords
- dbase_open
- dbase_pack
- dbase_replace_record