2013-12-18 1 views
0

У меня есть этот код, чтобы выбрать данные из одной таблицы и переместить их в другую в массиве.php SQL-запрос, вставляющий записи в неправильный столбец

<?php 
// CHANGE THE CONNECTION INFORMATION TO YOUR DETAILS (OFF YOU CARD) 
//$connection = mysql_connect("localhost","root"); 


$conn = new COM("ADODB.Connection") or die("Cannot start ADO"); 
$conn->Open("Provider=SQLOLEDB; .."); 

$conn2 = new COM("ADODB.Connection") or die("Cannot start ADO"); 
$conn2->Open("Provider=SQLOLEDB; Data Source=...; 
Initial Catalog=...; User ID=...; Password=..."); 


$rs = $conn->Execute("SELECT ColourID, Width, Height, Price FROM VS_Matrix"); // Recordset 

$num_rows = $rs->Fields->Count(); 

for ($i=0; $i < $num_rows; $i++) { 
    $fld[$i] = $rs->Fields($i); 
    $fld2[$i] = $rs->Fields($i); 
    $fld3[$i] = $rs->Fields($i); 
    $fld4[$i] = $rs->Fields($i); 
    $x= 469; 


} 

$rowcount = 0; 
while (!$rs->EOF) { 
    for ($i=0; $i < $num_rows; $i++) { 
     echo $fld[$i]->value . "\t"; 

$rs2 = $conn2->Execute("INSERT INTO TST (ID, ColourID, Width, Height, Price) VALUES ('".$x."','".$fld[$i]."','".$fld2[$i]."','".$fld3[$i]."','".$fld4[$i]."')"); 

    } 




    echo "\n"; 
    $rowcount++; 
     $x=$x+1;  // increments rowcount 
    $rs->MoveNext(); 
} 

$rs->Close(); 
$conn->Close(); 

$rs = null; 
$conn = null; 

По какой-то причине его размещение записей, по-видимому, случайным образом, вероятно, вызвало у меня глупую ошибку. Кто-нибудь может это заметить?

+1

Это вопрос, который вы только когда-либо назначая '$ х = 469;', и использовать это в качестве идентификатора в TST? В противном случае вам придется объяснить немного более подробно, что означает «размещение записей в случайном порядке». – andrewsi

+0

Кажется, что у вас есть одно и то же значение во всех ваших $ fld [$ i] переменных – user15

+0

x следует избегать единственного ограничения id – vast365

ответ

0

От PHP вручную комментарии пользователей PHP: COM - Manual:

$rows=0; 
    while(!$rs->EOF) { 
     for($i=0;$i<$rs->Fields->count;$i++) { 
      $rsf = $rs->Fields($i); 
      if($associative) $rtn[$rows][$rsf->Name] = $rsf->value; 
      else $rtn[$rows][$i] = $rsf->value; 
     } 
     $rows++; 
     $rs->MoveNext(); 
    } 

После этого вы будете иметь $rtn где $rtn[$row] - это массив, который состоит из значений одной строки базы данных.

0

Основываясь на вашем вопросе, я не уверен, почему вы делаете всю эту дополнительную работу. Предполагая, что идентификатор AUTO_INCREMENT вы можете просто:

INSERT INTO TST (ColourID, Width, Height, Price) 
SELECT ColourID, Width, Height, Price FROM VS_Matrix