---
title: "Inläsning och matchning"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/186976-inläsning-och-matchning"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "SoulGod"
published: "2011-05-17T05:21:36.000Z"
updated: "2011-05-22T20:04:54.000Z"
replies: 10
views: 1796
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/186976-inläsning-och-matchning"
---

# Inläsning och matchning

## #1 — SoulGod, 2011-05-17T05:21Z

Jag har en SQL-databas med ca 9000 poster i, med en himla massa kolumner...

Sen har jag en csv / excel fil med 3 kolumner (www - email - person id )...
I sql-database finns en likadan kolumn som heter person id ...

Jag vill kunna läsa in min csv / excel fil, och söka efter person id,
och såfort den hittar ett matchande person id,
så skall den uppdatera www och email från csv/excel \>\> SQL ...

Jag har för mig att det blir någon form av arraylösning,
men där tar mitt kunnande slut ...
någon som har ett tips i rätt riktning?

\*\*\* UPPDATERING \*\*\*
Har nu lyckats läsa in csv filen på min php fil, med följande kod...
Just nu skriver den ju tyvärr ut varje csv rad som en rad .. personid;email;www ... 

Hur får jag den att "dela upp det" så att jag kan plocka varje del in i olika kolumner i SQL?

```

<?php
$host="127.0.0.1"; // Host name 
$username="*"; // Mysql username 
$password="*"; // Mysql password 
$db_name="*"; // Database name 
$tbl_name="table1"; // Table name

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

$row = 1;
if (($handle = fopen("pargo-sql.csv", "r", ";")) !== FALSE) {
    while (($data = fgetcsv($handle, 10000, ",")) !== FALSE) {
        $num = count($data);
        //echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            //echo $data[$c] . "<br />\n";
            $info = $data[$c];
            list($pid, $email, $www) = explode(";", $info);
            echo "<br />";
            
            mysql_query("UPDATE table1 SET www='$www' AND email='$email' WHERE pid='$pid'");
            
        }
    }
    fclose($handle);
}
?>
```

Permalänk: https://www.webforum.nu/p/186976

## #2 — GunnarD, 2011-05-17T09:12Z

Du borde kunna köra [explode()](http://se.php.net/manual/en/function.explode.php) funktionen för att dela upp raden.

Permalänk: https://www.webforum.nu/p/2275911

## #3 — SoulGod, 2011-05-17T09:34Z

Uppdaterade min kod-ruta där uppe .. 

Jag tycker min kod ser bra ut , och när jag kör den får jag ej upp något felmeddelande,
men inget läggs till i databasen...

Någon aning?

Permalänk: https://www.webforum.nu/p/2275912

## #4 — GunnarD, 2011-05-17T10:29Z

Var har du mysql_query()?

Kan ju vara bra att ha :)

Permalänk: https://www.webforum.nu/p/2275918

## #5 — The_Hulk, 2011-05-17T10:30Z

Du gör aldrig något anrop till databasen med din sql-fråga i $insert.

Permalänk: https://www.webforum.nu/p/2275919

## #6 — SoulGod, 2011-05-17T10:42Z

Förlåt - la tydligen inte in hela updaten, jag korrigerade koden precis när jag la upp den ... Uppdaterat ovan nu

Permalänk: https://www.webforum.nu/p/2275920

## #7 — GunnarD, 2011-05-17T10:54Z

Om du kör

```
echo mysql_error();
```

efter mysql_querry() så ser du eventuella felmeddelanden.

jag brukar köra:

```
 update ... set aaa=1, bbb=2 ....
```

du har ett AND mellan, kommer inte ihåg om mysql gillar det.

Permalänk: https://www.webforum.nu/p/2275921

## #8 — SoulGod, 2011-05-17T11:01Z

Det kommer inte upp någonting alls .. den bara visar en vit sida som laddar, och sen har den laddat klart plötsligt, men inget visas trots mysql_error.

Jag testade nu att skriva ut all info enligt såhär:
echo "PID: ".$pid." - Email: ".$email." - WWW: ".$www."";
och all info skrivs ut ordentligt, så den har inga lässvårigheter från csv filen ..

Om jag ändrade till följande:
mysql_query("UPDATE table1 SET www='".$www."', email='".$email."' WHERE pid='".$pid."'");

( alltså lägger till ". ." runt orden ) så får jag upp att den får timeout, men vad jag har för mig så ska det ju bara vara ' ' runt?

Permalänk: https://www.webforum.nu/p/2275922

## #9 — GunnarD, 2011-05-17T12:52Z

Om du skriver så här:

```php
$query="UPDATE table1 SET www='$www', email='$email' WHERE pid='$pid'";
echo "<p>Query=$query</p>";
mysql_query($query);
echo mysql_error();
```

Då kan du 1) se om SQL uttrycket ser riktigt ut och 2) se om mysql_query() funktionen genererar något fel.

Permalänk: https://www.webforum.nu/p/2275923

## #10 — fiddler, 2011-05-17T16:29Z

Ett långskott kanske men...

```php
$pid = trim($pid)
```

Permalänk: https://www.webforum.nu/p/2275926

## #11 — aasah, 2011-05-22T20:04Z

Finns det ingen import-funktion i MySQL? Det borde det göra...

I så fall är den utan jämförelse enklaste lösningen att logga in i databasen, importera Excelfilen till en ny tabell som vi kan kalla ExcelUsers. Om den tabell du vill uppdatera heter MyUsers och bl.a. innehåller kolumnerna Email och WWW som ska uppdateras för personerna i filen, så kör du en UPDATE sats i databasen direkt:

```
UPDATE M
SET
  Email = E.Email,
  WWW = E.WWW
FROM
  MyUsers M
  INNER JOIN ExcelUsers E ON M.personID = E.PersonID
```

Inner join - ser till att bara de personid:n som finns både i MyUsers och i ExcelUsers uppdateras. 

När detta är gjort kan du ta bort ExcelUsers.

Permalänk: https://www.webforum.nu/p/2276036

---

Tråden på webben: https://www.webforum.nu/amne/php/186976-inläsning-och-matchning
