28 февр. 2011 г.

PHP && FoxPro DBF


Цель: научить зверюгу Пыха читать данные БД хитрого лиса ...
Дано: 
  • OS Window Server 2003  с многочисленными обновлениями, увы, под юниксами решения пока не нашел =(
  • Apache and etc. (all this not necessarily)
  • Базы даных FoxPro, то бишь файлы *.dbf и *.cdx  и 
  • PHP 5.3.5 (хотя версия принципиальной разницы не играет)

Решение:
Ничего необычного и особенного но полазить по гуглу пришлось ...
1) качаем оле драйверVFPOLEDBSetup.msi:  "Microsoft OLE DB Provider for Visual FoxPro"
2) ставим его в ситему, где крутится пых
3) пишем скрипт testconnect.php :
# Обращаю внимание, путь указан сетевой, оле-драйвер съедает это нормально без излишних шаманств ... 
$path="//remotedb/foxprog/dbf";
# пытаемся приконектится ...
try {
 $conn = new COM("ADODB.Connection");
 $conn->Open("Provider=vfpoledb.1;Data Source=".$path.";Collating Sequence=Machine");
} catch (Exception $e) {
 echo $e->getMessage();
 exit; # по своему усмотрению
}

#выполняем какой то запрос
try {
 $res = $conn->Execute("SELECT * FROM mytable");
} catch (Exception $e) {
 echo $e->getMessage();
 exit;
}

#получаем количество и массив полей запроса
$cntFields = $res->Fields->Count();
$arrFields=array();
for ($i=0; $i < $cntFields; $i++) {
    $arrFields[$i] = $res->Fields($i);
}


#получаем данные ...
$rows = array();
while (!$res->EOF) {
  $arr=array();
  for ($i=0; $i < $cntFields; $i++) {
     $arr[$arrFields[$i]->name] =  $arrFields[$i]->value;
  }
  $rows[] = $arr;
  $res->MoveNext();
}


#наш массивчик данных
var_dump($rows);


enjoy =)

2 комментария:

  1. galaxy watch 3 titanium - Titanium Art - TITanium Art
    Star Wars Galaxy Watch titanium flash mica 3 titanium · Star Wars galaxy watch 3 titanium black titanium rings · titanium welding Star Wars titanium lug nuts galaxy watch 3 titanium. Star Wars galaxy watch 3 titanium · Star Wars galaxy watch 3 dental implants

    ОтветитьУдалить