2010-06-04 75 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