테이블이 작 으면 전체 테이블을 보내고 이전 데이터를 삭제 한 다음 원격 서버에 새 데이터를 삽입하면 쉬운 일반 솔루션이 될 수 있습니다. 테이블 데이터로 긴 문자열을 만들 수 있습니다 웹 서비스를 통해 보내십시오. 다음은이를 구현하는 방법입니다.당신이 큰 테이블이있는 경우
function DumpTableIntoString($tableName, $includeFieldsHeader = true)
{
global $adoConn;
$recordSet = $adoConn->Execute("SELECT * FROM $tableName");
if(!$recordSet) return false;
$data = "";
if($includeFieldsHeader)
{
// fetching fields
$numFields = $recordSet->FieldCount();
for($i = 0; $i < $numFields; $i++)
$data .= $recordSet->FetchField($i)->name . ",";
$data = substr($data, 0, -1) . "\n";
}
while(!$recordSet->EOF)
{
$row = $recordSet->GetRowAssoc();
foreach ($row as &$value)
{
$value = str_replace("\r\n", "", $value);
$value = str_replace('"', '\\"', $value);
if($value == null) $value = "\\N";
$value = "\"" . $value . "\"";
}
$data .= join(',', $row);
$recordSet->MoveNext();
if(!$recordSet->EOF)
$data .= "\n";
}
return $data;
}
// NOTE: CURRENTLY FUNCTION DOESN'T SUPPORT HANDLING FIELDS HEADER, SO NOW IT JUST SKIPS IT
// IF NECESSARRY
function FillTableFromDumpString($tableName, $dumpString, $truncateTable = true, $fieldsHeaderIncluded = true)
{
global $adoConn;
if($truncateTable)
if($adoConn->Execute("TRUNCATE TABLE $tableName") === false)
return false;
$rows = explode("\n", $dumpString);
$startRowIndex = $fieldsHeaderIncluded ? 1 : 0;
$query = "INSERT INTO $tableName VALUES ";
$numRows = count($rows);
for($i = $startRowIndex; $i < $numRows; $i++)
{
$row = explode(",", $rows[$i]);
foreach($row as &$value)
{
if($value == "\"\\N\"")
$value = "NULL";
}
$query .= "(". implode(",", $row) .")";
if($i != $numRows - 1)
$query .= ",";
}
if($adoConn->Execute($query) === false)
{
return false;
}
return true;
}
, 그럼 당신은 새로운 데이터를 보낼 필요가 있다고 생각 : 이것은 지금까지 내가 웹 사이트 사이에 작은 간단한 테이블을 전송하는 방법을하지 완벽한 솔루션, 단지 예를 들어 있음을 유의하십시오. 원격 서버에 최신 타임 스탬프를 요청한 다음 주 서버에서 최신 데이터를 모두 읽고 일반적인 방식으로 데이터를 보내거나 (위에서 설명한 것처럼) 비 일반적인 방식으로 데이터를 보냅니다 (이 경우 별도로 작성해야합니다. 각 테이블에 대한 함수).