Php、odbc和vfp

Php、odbc和vfp,php,dbf,visual-foxpro,dbase,Php,Dbf,Visual Foxpro,Dbase,我正在尝试用php连接dbf数据库。我试过几种不同的方法,但都不走运 PHP:5.3.8 文件:C:\xampp\htdocs\work\vcabdoc.dbf 第一种方式: 已创建数据源dbvfp,驱动程序C:\Windows\system32\vfpodbc.dll 使用$odbc=odbc_connect'dbvfp',或die'Not connect to odbc Database!' 第二种方式: 第三种方式: 我在这个案例中,尝试了使用和不使用双斜杠\ 有什么帮助吗?提前谢谢 问候

我正在尝试用php连接dbf数据库。我试过几种不同的方法,但都不走运

PHP:5.3.8 文件:C:\xampp\htdocs\work\vcabdoc.dbf

第一种方式: 已创建数据源dbvfp,驱动程序C:\Windows\system32\vfpodbc.dll

使用$odbc=odbc_connect'dbvfp',或die'Not connect to odbc Database!'

第二种方式: 第三种方式: 我在这个案例中,尝试了使用和不使用双斜杠\

有什么帮助吗?提前谢谢

问候,


Joao

您正在设置的数据源包含.DBF的全名。。。不要那样做。数据源应该只指向表所在的物理目录。。。。然后,当您向一个表发出查询时,它会根据您要查询的名称在路径中查找.dbf,找到它并返回。。。此外,您不需要显式地包括.dbf,例如

从YourTable.dbf中选择*

按反馈编辑

正在打开的连接具有数据源。这说明它应该在哪里找到数据。当连接到VFP源时,只需将源设置为表的物理路径。注意,我刚刚从字符串参数中去掉了VCABDOC.DBF

$conn->Open('Provider=VFPOLEDB.1;Data Source="C:\\xampp\\htdocs\\work;";');
现在,您应该能够直接从位于c:\xampp\htdocs\work文件夹中的表进行查询

$rs = $conn->Execute("SELECT * FROM vcabdoc");
最后,假设您的c:\xampp\htdocs\work文件夹中有多个.dbf表。比如说,一个简单的客户/订单输入系统,你想要获得特定人员的所有订单。只要两个表都在同一个文件夹中,即:work,那么您可以执行以下操作

    $rs = $conn->Execute(
"SELECT customer.*, orders.* 
   FROM customer 
      join orders on customer.ID = orders.customerID 
      order by orders.date");
c:\xampp\htdocs\work\
c:\xampp\htdocs\work\SubFolder1
c:\xampp\htdocs\work\SubFolder2
注意,我没有显式地将完整路径加上表名放入查询中。连接知道将在何处尝试查找表以完成查询。此外,您的连接不允许您向后走相对路径,更接近C:,但允许您向前走相对路径。假设你有一个目录结构,比如

    $rs = $conn->Execute(
"SELECT customer.*, orders.* 
   FROM customer 
      join orders on customer.ID = orders.customerID 
      order by orders.date");
c:\xampp\htdocs\work\
c:\xampp\htdocs\work\SubFolder1
c:\xampp\htdocs\work\SubFolder2
然后,您将连接点指向原始示例中的工作文件夹。您可以引用查询中的子文件夹进行查询。在这个查询中,我在每个表名引用之后都使用了一个别名,因此我不必显式地键入在查询其余部分中使用的长表名。它使可读性更容易

("c" is alias to customers table)
("sft1" is alias to Sub-folder first table )
("sft2" is alias to Sub-folder second table )

select 
      c.*, 
      sft1.someField, 
      sft2.AnotherField
   from 
      customers c
         join SubFolder1\SomeOtherTable sft1
            on c.SomeCommonColumn = sft1.SameCommonColumn
         join SubFolder2\SecondTable sft2
            on c.ADifferentColumn  =sft2.SimilarPurposeColumn

希望这能帮助你澄清一些事情。

我不太明白你说的话,你看,我只有16岁,我正试图这样做是为了我的实习,如果你能更好地向我解释这一点,请提前向我表示感谢,并对我缺乏经验表示歉意。@user1274469,请参阅修改后的答案以获得澄清。@user1274469
("c" is alias to customers table)
("sft1" is alias to Sub-folder first table )
("sft2" is alias to Sub-folder second table )

select 
      c.*, 
      sft1.someField, 
      sft2.AnotherField
   from 
      customers c
         join SubFolder1\SomeOtherTable sft1
            on c.SomeCommonColumn = sft1.SameCommonColumn
         join SubFolder2\SecondTable sft2
            on c.ADifferentColumn  =sft2.SimilarPurposeColumn