Ik heb een MySQL-wrapper class die SQL-resultaten uit de db trekt mbv mysql_query / mysql_query
Nu heb ik een functie geschreven, die twee tabellen in mijn database synchroniseert. Stel je hebt een tabel 'automerken' en een tabel 'autos'. Autos zijn gekoppeld aan automerken met een kolom 'automerkId'.
Als je een automerk verwijdert uit de tabel 'automerken' (bijv. Opel), dan moeten alle autos van het merk Opel uit de tabel 'autos' verwijderd worden.
Mijn code ziet er als volgt uit:
Het probleem is dat er soms (en zonder enige reden, zo lijkt het) auto's verwijderd worden, waarvan het merk nog wel bestaat. Mijn vraag is dan ook: hoe zou dit komen?
Mijn hypothese
Wacht php totdat
is uitgevoerd, voordat
wordt uitgevoerd?
Het kost natuurlijk wat tijd om gegevens uit de database te halen, dus ik kan me voorstellen dat $aThisData of $aSyncData nog leeg is (omdat de db nog niet zijn resultaten heeft teruggeven) zodra ik het verschil bereken met de functie array_minus_array. Of is dat grote onzin?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| /** * Find array of values from database * @param [string] sql query * @return [array] */ function getArray($sql) { $db_rs = mysql_query($sql, $this->getConnectionId()); $num_fields = mysql_num_fields($db_rs); while ($row = mysql_fetch_array($db_rs, MYSQL_ASSOC)) { for ($i = 0; $i < $num_fields; $i++) { $result[mysql_field_name($db_rs, $i)][] = $row[mysql_field_name($db_rs, $i)]; } } return $result; |
Nu heb ik een functie geschreven, die twee tabellen in mijn database synchroniseert. Stel je hebt een tabel 'automerken' en een tabel 'autos'. Autos zijn gekoppeld aan automerken met een kolom 'automerkId'.
Als je een automerk verwijdert uit de tabel 'automerken' (bijv. Opel), dan moeten alle autos van het merk Opel uit de tabel 'autos' verwijderd worden.
Mijn code ziet er als volgt uit:
PHP:
1
2
3
4
5
6
7
8
9
10
11
| /* haal automerken op */ $aThisData = $oThisDbTable->getArray(); /* haal autos op */ $aSyncData = $oSyncDbTable->getArray(); /* bereken het verschil tussen de twee arrays */ $aDifference= array_minus_array($aSyncData['automerkId'], $aThisData['ID']); /* aDifference bevat nu de IDs van autos waarvan het merk niet meer in de tabel automerken staat */ $oSyncDbTable->deleteRows($aArrayMinusArray['difference']); //verwijder autos |
Het probleem is dat er soms (en zonder enige reden, zo lijkt het) auto's verwijderd worden, waarvan het merk nog wel bestaat. Mijn vraag is dan ook: hoe zou dit komen?
Mijn hypothese
Wacht php totdat
PHP:
1
| $aThisData = $oThisDbTable->getArray(); |
is uitgevoerd, voordat
PHP:
1
| $aSyncData = $oSyncDbTable->getArray(); |
wordt uitgevoerd?
Het kost natuurlijk wat tijd om gegevens uit de database te halen, dus ik kan me voorstellen dat $aThisData of $aSyncData nog leeg is (omdat de db nog niet zijn resultaten heeft teruggeven) zodra ik het verschil bereken met de functie array_minus_array. Of is dat grote onzin?