Bladeren door database met SQL leidt tot fout

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

George van Baasbank

George van Baasbank

15/11/2012 19:44:49
Quote Anchor link
Hallo allemaal,

Met behulp van deze code probeer ik twee databases bij te werken. Helaas loopt het fout.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
$sql = "SELECT * FROM ftphp__fam";
$cResultHuwelijk = mysql_query($sql);
$nAantalHuwelijken = mysql_num_rows($cResultHuwelijk);

// De huwelijksgegevens worden bijgewerkt
    if($nAantalHuwelijken != 0) {
        while($row = mysql_fetch_array($cResultHuwelijk)) {
            // Idnummers ophalen
            $cIndiIdMan = $row['husb'];
            $cIndiIdMan2 = substr($cIndiIdMan,3,25);
            $cIndiIdVrouw = $row['wife'];
            $cIndiIdVrouw2 = substr($cIndiIdVrouw,3,25);
            // Huwelijksgegevens ophalen
            $cIndiHuwSortDatum = "N-" . $row['datec'];
            $cIndiHuwDatum = substr($row['datec'],8,2) . "-" . substr($row['datec'],5,2) . "-" . substr($row['datec'],0,4);
            $cIndiHuwPlaats = $row['plac'];
            // Naam partner ophalen
            $sql = "SELECT * FROM ftphp__indi_name WHERE iid = '$cIndiIdVrouw' LIMIT 1";
            $cResultVrouw = mysql_query($sql);
            $nAantalVrouwen = mysql_num_rows($cResultVrouw);
            if($nAantalVrouwen == 0){
                $cIndiNaamVrouw = "";
            } else {
                $row = mysql_fetch_array($cResult);
                $cIndiNaamVrouw = $row['givn'] . " " . $row['spfx'] . " " . $row['surn'];
            }
            
            $sql = "SELECT * FROM ftphp__indi_name WHERE iid = '$cIndiIdMan' LIMIT 1";
            $cResultMannen = mysql_query($sql);
            $nAantalMan =mysql_num_rows($cResultMannen);
            if($nAantalMan == 0) {
                $cIndiNaamMan = "";
            } else {
                $row = mysql_fetch_array($cResult);
                $cIndiNaamMan = $row['givn'] . " " . $row['spfx'] . " " . $row['surn'];
            }

            $sql1 = "UPDATE ove_genealogie SET tr_sortdatum = '$cIndiHuwSortDatum', tr_plaats = '$cIndiHuwPlaats', relatie_datum = '$cIndiHuwDatum', partner_id = '$cIndiIdVrouw2', partner = '$cIndiNaamVrouw' WHERE iid = '$cIndiIdMan';";
            $cResultMan = mysql_query($sql1);
        
            $sql2 = "UPDATE ove_genealogie SET tr_sortdatum = '$cIndiHuwSortDatum', tr_plaats = '$cIndiHuwPlaats', relatie_datum = '$cIndiHuwDatum', partner_id = '$cIndiIdMan2', partner = '$cIndiNaamMan' WHERE iid = '$cIndiIdVrouw';";
            $cResultVrouw = mysql_query($sql2);
        }
    }


Als deze code wordt uitgevoerd ontstaat een Proxyfout.
Ik heb e.e.a. getest en bij het uitvoeren van dit gedeelte gaat het mis.

Ziet er een fout in mijn SQL/PHP?
Ik zie het niet.


George
Gewijzigd op 15/11/2012 20:45:34 door George van Baasbank
 
PHP hulp

PHP hulp

19/04/2024 23:33:14
 
- SanThe -

- SanThe -

15/11/2012 19:58:37
Quote Anchor link
Zet altijd de error reporting aan.
Dan zie je wat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

// rest van je script
?>

Regel 24 en 34: $row = mysql_fetch_array($cResult);
$cResult bestaat niet.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

15/11/2012 20:56:46
Quote Anchor link
Ik sluit me aan bij SanThe, daarnaast voer je in een while lus op resultaat van een query nog eens 4 queries uit. Dat betekent als je 1000 rijen uit de eerste query terug krijgt je 4000 queries in één php script.
Hetgeen zal werken, maar wat als je straks 50.000 rijen hebt?:
Fatal error: max execution time exceeded (of zoiets).

Een select query gebaseerd op gegevens uit een andere query kan altijd teruggebracht worden naar een join. (maw 1 query)

De update query kan ik niet plaatsen, als in tabel A iets veranderd en in tabel B moeten daarom ook waarden veranderen, dan zou dat moeten gebeuren op het moment dat die wijziging in tabel A plaats vindt, dmv de logica daarvoor in de app te plaatsen of in de db zelf (bv dmv triggers)
 
George van Baasbank

George van Baasbank

16/11/2012 11:30:23
Quote Anchor link
Ger,

De update van de tabel ove_genealogie is noodzakelijk omdat in een eerder stadium nieuwe records zijn aangemaakt met behulp van andere brontabellen. De zgn ingewikkelde oplossingen zijn nodig omdat wereldwijd de GEDCOM-bestanden op een bijzondere wijze zijn opgeslagen. Overal staan verwijzingen in naar moedertabellen die zonder deze hulptabellen niet bruikbaar zijn.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

16/11/2012 12:06:28
Quote Anchor link
George,
Ik heb net even je topic van 12-11 gelezen, dat had ik nog niet gezien, ik zal daar verder reageren, want anders gaan dingen teveel door elkaar lopen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.