2010-06-04 3 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: С ИНЕКЕ

$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 as I) = 1] , и это, похоже, отлично работает для меня. – mtanish

 Смежные вопросы

  • Нет связанных вопросов^_^