2016-02-17 70 views
0

我喜歡寫一個csv導入/更新到我的Mysql數據庫,但它不起作用。我沒有收到錯誤消息。在Mysql中導入CSV不起作用

任何人都可以幫助我找到錯誤或什麼錯我的腳本請。

// set local variables 
$connect = mysql_connect("localhost","root","") or die('Could not connect: ' . mysql_error()); 
$handle = fopen("imptest.csv", "r"); 

// connect to mysql and select database or exit 
mysql_select_db("shoptest1", $connect); 

    while($data = fgetcsv($handle, 30000, ';')) //Jede Zeile durchgehen 
    { 
    $Product_ID=$data[0]; 
    $field=$data[1]; 

    $query = 'SELECT Product_ID FROM testprod'; 
if (!$result = mysql_query($query)) { 
continue; 
} if ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { 

// entry exists update 
$query = "UPDATE ps_product_lang SET custom_field ='$field' WHERE id_product = '$Product_ID'"; 


mysql_query($query); 
if (mysql_affected_rows() <= 0) { 
echo "kein update"; 
// no rows where affected by update query 
} 
} else { 
echo "kein eintrag"; 
// entry doesn't exist continue or insert... 
} 

mysql_free_result($result); 
} 

fclose($handle); 
mysql_close($connect); 




?> 
+0

**使用不推薦的'mysql_ *'API停止**。使用'mysqli_'或'PDO'。 – Jens

+0

你永遠不會檢查錯誤,所以你不會收到錯誤信息 – Jens

+0

你正在'te​​stprod'中選擇所有行,並且在錯誤時選擇'continue',或者如果表至少包含1個ProductID,則更新另一個表中的行'可能存在或不存在的ps_product_lang'。 – Kenney

回答

0

您正在執行的查詢:

SELECT Product_ID FROM testprod 
UPDATE nl_product_lang SET custom_field = ? WHERE Product_ID = ? 

是適合於檢測產品是否存在,然後更新或INSERT。對於只有更新,SELECT不重要,因爲不會有條目WHERE Product_ID NOT IN (SELECT Product_ID FROM testprod) - 如果您有外鍵。

下面是如何使用PDO執行此操作的示例。

list($SQLDSN, $SQLUSER, $SQLPASS) = [ 'mysql:dbname=shoptest1', 'root', '' ]; 

$db = new PDO($SQLDSN, $SQLUSER, $SQLPASS, [  
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', 
    PDO::ATTR_ERRMODE    => PDO::ERRMODE_EXCEPTION 
]); 

$ids = $db->query("SELECT Product_ID from testprod")->fetchAll(\PDO::FETCH_COLUMN, 0); 

while (list($Product_ID, $field) = fgetcsv(...)) 
    if (in_array($Product_ID, $ids)) 
     query($db, "UPDATE ps_product_lang SET custom_field = ? WHERE Product_ID = ?", 
      [ $field, $Product_ID ] 
     ); 
    else 
     trigger_warning("unknown product $Product_ID"); 

function query($db, $sql, $args = null) { 
    $sth = $db->prepare($sql); 
    $sth->execute($sql); 
    return $sth; 
}