2010-06-04 74 views
0

我使用PHP来更新VFP 9.0下的一些表使用ADO COM。Visual FoxPro DBF更新使用PHP

我能够选择和更新DBF,直到我指定的任何条款。
当我添加一个where子句到查询,它只是返回或更新0行。

$conn = new COM("ADODB.Connection"); 
$conn->Open('Provider=VFPOLEDB.1;Data Source="C:\\testDB.dbc";'); 

$query = "UPDATE TABLE1 set COL1 = \"AA\", COL2 = \"Updated value\" "; 
$conn->Execute($query); 

$query = "SELECT * FROM TABLE1 "; 
$rs = $conn->Execute($query) or die("Error in query: $query. " . $conn->ErrorMsg()); 
while (!$rs->EOF) { 
    echo " Got COL1: " . $rs->Fields("COL1") . " :: COL2: " . $rs->Fields("COL2") . " id: " . $rs->Fields("ID") . "\n"; 
    $rs->MoveNext(); 
} 

结果:

Got COL1: AA :: COL2: Updated value     id: 0 
Got COL1: AA :: COL2: Updated value     id: 1 
Got COL1: AA :: COL2: Updated value     id: 2 

代码2:与where子句

$query = "UPDATE TABLE1 set COL1 = \"BB\", COL2 = \"NEW2\" WHERE ID = 1"; 
$conn->Execute($query); 
$query = "SELECT * FROM TABLE1 "; 
$rs = $conn->Execute($query) or die("Error in query: $query. " . $conn->ErrorMsg()); 
while (!$rs->EOF) { 
    echo " Got COL1: " . $rs->Fields("COL1") . " :: COL2: " . $rs->Fields("COL2") . " id: " . $rs->Fields("ID") . "\n"; 
    $rs->MoveNext(); 
} 

结果:

Got COL1: AA :: COL2: Updated value     id: 0 
Got COL1: AA :: COL2: Updated value     id: 1 
Got COL1: AA :: COL2: Updated value     id: 2 

ID列在上述表中的键。

我对VFP比较陌生。我不知道这是一个Visual FoxPro设置或其他什么阻止更新或选择如果选择性地完成。

回答

0

您正在使用的标准SQL风格语句可以轻松与VFP兼容。就像你的样本一样简单,我会先尝试一个小小的改动。而不是使用逃生”,只需用单引号括起来的样本,如

UPDATE TABLE1设置COL1 =‘AA’,COL2 =‘更新值’,其中ID = 1

看看,做任何事情。一旦正在工作,然后我会去参数化的查询安全......特别是在基于网络的情况下.VFP不像其他基于数据库的“指定占位符”工作,而是使用'?'来处理基于序数的占位符。在您的“价值”应该适用......如

UPDATE TABLE1设置COL1 =?,COL2 =?其中id =?

然后,添加参数时,基于相同的序列作为添加?占位

YourAdo.Parameters.Add("ForColumn1", variableForColumn1); 
YourAdo.Parameters.Add("ForColumn2", variableForColumn2); 
YourAdo.Parameters.Add("IDKeyColumn", variableForID); 

然后,你要善于去。

对不起,我不能明确用PHP有所帮助,那不是一个我直接熟悉,但应该帮助上引导你它

+0

因为没有WHERE子句的查询工作正常,所以它与引号没有问题。不过谢谢你。 有人建议我使用Cast作为解决方法[ 其中cast(ID为I)= 1] 并且对我来说这似乎工作正常。 – mtanish 2010-06-14 19:57:48