我在PHP中循环使用csv并使用数据更新mysql数据库。运行我的代码时,它会插入相同的数据800次,然后继续下一条记录。一旦它到达第二条记录,它似乎将每行插入数据库中的一行,就像它应该的那样。
我在mysql可能正在纠正的循环(可能是无限循环)中是否有错误?
$link = mysql_connect('localhost', 'user', 'pass');
if (!$link) {
die('Not connected : ' . mysql_error());
}
// make foo the current db
$db_selected = mysql_select_db('parsetest', $link);
if (!$db_selected) {
die ('Can\'t use parsetest : ' . mysql_error());
}
function csv_to_array($filename='', $delimiter=',')
{
if(!file_exists($filename) || !is_readable($filename))
return FALSE;
$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE)
{
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
{
if(!$header)
$header = $row;
else
$data[] = array_combine($header, $row);
}
fclose($handle);
}
return $data;
}
$data = csv_to_array('stockimp.csv');
foreach ($data as $key) {
$style = $key['Style'];
$result = mysql_query("SELECT * FROM stocklink2 WHERE Style = '$style'");
if($result === FALSE) {
die(mysql_error()); // TODO: better error handling
}
if( mysql_num_rows($result) > 0) {
$result = mysql_query("UPDATE stocklink2 SET Style = '$style' ");
if (!$result) {
die('Invalid query on update: ' . mysql_error());
}
else {
echo $key['Style']." Updated <br>";
}
}
else
{
$result = mysql_query("INSERT INTO stocklink2 (Style) VALUES ('$style') ");
if (!$result) {
die('Invalid query on insert: ' . mysql_error());
}
else {
echo $key['Style']." Inserted <br>";
}
}
}
更新
原来的问题已经解决了。该表没有任何列设置为唯一,一旦我将表的第一列更改为&#34; unique&#34;记录按顺序插入。
循环的更新部分现在无法复制条目&#39; 2&#39;。
答案 0 :(得分:0)
原来的问题已经解决了。一旦我将表的第一列更改为“唯一”按顺序插入的记录,表中没有任何列设置为唯一。
循环的更新部分失败,重复条目为“2”。 最终的工作解决方案:
$link = mysql_connect('localhost', 'user', 'pass');
if (!$link) {
die('Not connected : ' . mysql_error());
}
// make foo the current db
$db_selected = mysql_select_db('parsetest', $link);
if (!$db_selected) {
die ('Can\'t use foo : ' . mysql_error());
}
/*===============================================
= Generate array from csv =
===============================================*/
function csv_to_array($filename='', $delimiter=',')
{
if(!file_exists($filename) || !is_readable($filename))
return FALSE;
$header = NULL;
$data = array();
if (($handle = fopen($filename, 'r')) !== FALSE)
{
while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)
{
if(!$header)
$header = $row;
else
$data[] = array_combine($header, $row);
}
fclose($handle);
}
return $data;
}
$data = csv_to_array('stockimp.csv');
foreach ($data as $key) {
//set and print style
$style = $key['Style'];
$id = $key['Rec No'];
echo $style."<br><br>";
// See if the style exists
$result = mysql_query("SELECT * FROM stocklink2 WHERE 'Rec No' = '$id'");
print_r($result);
// if there's an error, die
if($result === FALSE) {
die(mysql_error()); // TODO: better error handling
}
// else do this
else{
$insert = mysql_query("INSERT INTO stocklink2 (`Rec No`,`Style`) VALUES ('$id','$style') ON DUPLICATE KEY UPDATE Style = '$style'; ");
}
}
这不是最佳解决方案,因为仍然可以添加mysqli和预处理语句。