0

我正在使用 php 使用 ADO COM 更新 VFP 9.0 下的一些表。

在我指定任何Where子句之前,我可以选择和更新 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 设置还是其他阻止更新或选择是否有选择地进行的设置。

4

1 回答 1

0

您使用的标准 SQL 样式语句很容易与 VFP 兼容。就像您的示例一样简单,我会先尝试一些细微的改动。而不是使用转义“,只需在您的样本周围使用单引号,例如

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

看看有没有什么作用。一旦它起作用了,我就会去参数化查询以确保安全……尤其是在基于 Web 的情况下。VFP 不能像其他数据库一样使用“命名占位符”,而是使用“?”来使用基于序号的占位符。你的“价值”应该应用在哪里......比如

更新 TABLE1 设置 col1 = ?, col2 = ? 哪里 id = ?

然后,在添加参数时,按照与?占位符

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

那么,你应该很高兴。

抱歉,我不能专门为 PHP 提供帮助,因为那不是我直接熟悉的,但应该可以帮助指导您。

于 2010-06-07T18:52:18.607 回答