[MySQL/ODBC]Replace, gebruikt enkel de eerste rij

Pagina: 1
Acties:

  • ToMaSZ
  • Registratie: Januari 2000
  • Laatst online: 15:49
Goed, ik zit me blind te staren op het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function Error_Handler($msg, $cnx) { 
        echo "$msg \n"; 
        odbc_close($cnx); 
        exit(); 
}

$t=time();
$today=date("j F Y",$t);

$conn = odbc_connect("servicedb", "", "");
if (!$conn) { Error_handler( "Fout in ODBC verbinding" , $conn ); }
$query="SELECT * FROM Klanten";
$result = odbc_exec($conn,$query);
if (!$result) { Error_handler( "Error in odbc_exec( Klantentabel is leeg! ) " , $conn ); }

while (@odbc_fetch_row($result)) {
             $bedrid          = odbc_result($result, 1);
             $bedrijf         = odbc_result($result, 3);
             $contpers     =    odbc_result($result, 4);
             $adres       = odbc_result($result, 5);
             $adres       = split(" ", $adres, 2);
             $postcode    = odbc_result($result, 6);
             $plaats          = odbc_result($result, 7);
             $telnr       = odbc_result($result, 13);
             $faxnr       = odbc_result($result, 16);
             $mail        = odbc_result($result, 17);        
include_once("header.inc.php"); 
include_once ("common.inc.php");    
mysql_select_db(DBNAME) or die ("Unable to select database!");       
$connection = mysql_connect(DBHOST, DBUSER, DBPASS) or die ("Verbinden mislukt");

$query2 = "REPLACE hd_companies SET cid = '$bedrid', name = '$bedrijf', addr1 
= '$adres[0]', addr2 = '$adres[1]', city = '$plaats', zip = '$postcode'";
$result2 = mysql_query($query2) or die ("Error in query: $query2. " .
mysql_error());
}

Alleen de eerste rij uit de Access-tabel wordt nu weggeschreven in de mysql-table.
Een gewone export is geen optie, omdat later nog een deel van de data moet worden weggeschreven in een 2e mysql-tabel.

Ik was er van overtuigd dat de while-statement ervoor zou moeten zorgen dat alle records netjes werden langsgegaan, maar het tegendeel blijkt :?

What the eyes see, and the ears hear, the mind believes...


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Kijk eens goed naar wat je ìn je loop doet, en wat daarvan buiten je loop hoort.
Ik vermoed dat die includes (zelfs al zijn ze once) buiten je loop horen, en het maken van je verbinding ook.

Waar zit verder het probleem? Worden de gegevens niet goed opgehaald, of niet goed weggeschreven?

Wat heb je zelf al geprobeerd?


.edit [Ik heb even de vrijheid genomen om je code wat op te schonen]
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
function Error_Handler($msg, $cnx) {
    echo "$msg \n";
    odbc_close($cnx);
    exit();
}

$t=time();
$today=date("j F Y",$t);


$conn = odbc_connect("servicedb", "", "");
if (!$conn) {
    Error_handler( "Fout in ODBC verbinding" , $conn );
}


$query="SELECT * FROM Klanten";
$result = odbc_exec($conn,$query);
if (!$result) {
    Error_handler( "Error in odbc_exec( Klantentabel is leeg! ) " , $conn );
}


include_once("header.inc.php");
include_once ("common.inc.php");

mysql_select_db(DBNAME) or die ("Unable to select database!");
$connection = mysql_connect(DBHOST, DBUSER, DBPASS) or die ("Verbinden mislukt");

while (@odbc_fetch_row($result)) {
    $bedrid     =    addslashes(odbc_result($result, 1));
    $bedrijf    =    addslashes(odbc_result($result, 3));
    $contpers   =    addslashes(odbc_result($result, 4));
    $adres      =    addslashes(odbc_result($result, 5));
    $adres      =    split(" ", $adres, 2);
    $postcode   =    addslashes(odbc_result($result, 6));
    $plaats     =    addslashes(odbc_result($result, 7));
    $telnr      =    addslashes(odbc_result($result, 13));
    $faxnr      =    addslashes(odbc_result($result, 16));
    $mail       =    addslashes(odbc_result($result, 17));

    $query2 = "
        REPLACE hd_companies
        SET cid = '$bedrid',
        name = '$bedrijf',
        addr1   = '$adres[0]',
        addr2 = '$adres[1]',
        city = '$plaats',
        zip = '$postcode'";

    $result2 = mysql_query($query2) or die ("Error in query: $query2. " . mysql_error());
}

[ Voor 81% gewijzigd door kvdveer op 02-05-2003 11:25 ]

Localhost, sweet localhost


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Vervangt zo'n replace niet toevallig de hele tabel?

Who is John Galt?


  • ToMaSZ
  • Registratie: Januari 2000
  • Laatst online: 15:49
kvdveer schreef op 02 mei 2003 @ 11:11:
Kijk eens goed naar wat je ìn je loop doet, en wat daarvan buiten je loop hoort.
Ik vermoed dat die includes (zelfs al zijn ze once) buiten je loop horen, en het maken van je verbinding ook.

Waar zit verder het probleem? Worden de gegevens niet goed opgehaald, of niet goed weggeschreven?

Wat heb je zelf al geprobeerd?
De verbinding zat al niet in de loop, dat lijkt me idd wat overdreven.
Inmiddels de includes uit de loop getrapt, de loop gaat nu goed, tot na 112 van de 1050 records, waar opeens een fout optreedt in de sql syntax (aldus de melding) Ik kan daarin echter niet iets vinden qua leestekens oid in de data. Volgens de melding zit de fout 'near zip = 5200 MG', daar kan ik weinig mee dus... maar ik stoei even verder :)

What the eyes see, and the ears hear, the mind believes...


  • ToMaSZ
  • Registratie: Januari 2000
  • Laatst online: 15:49
justmental schreef op 02 May 2003 @ 11:15:
Vervangt zo'n replace niet toevallig de hele tabel?
Nee, REPLACE is een combinatie van update en insert. De data wordt toegevoegd als deze nog niet bestaat. Bestaat er al een identieke rij, dan wordt die betreffende rij overgeslagen. Ideaal voor het synchroniseren van tabellen dus :)

What the eyes see, and the ears hear, the mind believes...


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Ik denk dat ik de dader weet... Kijk eens naar mysql_escape_string (of addslashes)
Zie mijn posting een paar honderd pixels hoger...

[ Voor 25% gewijzigd door kvdveer op 02-05-2003 11:26 ]

Localhost, sweet localhost


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

ToMaSZ schreef op 02 May 2003 @ 11:20:
[...]

Nee, REPLACE is een combinatie van update en insert. De data wordt toegevoegd als deze nog niet bestaat. Bestaat er al een identieke rij, dan wordt die betreffende rij overgeslagen. Ideaal voor het synchroniseren van tabellen dus :)
Die wordt niet overgeslagen, de rij wordt vervangen. met INSERT IGNORE wordt 'ie overgeslagen. Uiteraard heb je daar wel een primary key voor nodig...

Localhost, sweet localhost


  • ToMaSZ
  • Registratie: Januari 2000
  • Laatst online: 15:49
kvdveer schreef op 02 May 2003 @ 11:24:
Ik denk dat ik de dader weet... Kijk eens naar mysql_escape_string (of addslashes)
Zie mijn posting een paar honderd pixels hoger...
Top! dit gaat goed zo, thnx.

What the eyes see, and the ears hear, the mind believes...

Pagina: 1