2016-02-17 2 views
0

Мне нравится писать csv import/update в мою базу данных Mysql, но это не работает. Я не получаю сообщений об ошибках.Импорт CSV в Mysql не работает

Может кто-нибудь помочь мне найти ошибку или что-то не так с моим скриптом, пожалуйста.

// 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

Вы выбираете все строки в 'testprod' и либо' continue' при ошибке, либо, если в таблице содержится не менее 1 ProductID, обновите строку в другой таблице ' ps_product_lang', который может существовать или не существовать. – Kenney

ответ

0

Запросы вы выполняете:

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

пригодны для обнаружения, существует ли продукт, а затем либо UPDATE или INSERT. Только для UPDATE 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; 
} 
Смежные вопросы