opgelost: while
Hieronder de code. Maar deze stopt na 1 record.
Mogelijk heeft dat te maken met '%%", maar weet even niet hoe dit moet en zag via google ook niet echt iets.
Weet een van jullie dit?
Code (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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
// Verbind met database
try
{
$pdoResult = $pdoConnect->prepare("SELECT * FROM db_bidprentjes WHERE id LIKE :id ");
$pdoResult->bindValue(':id', '%%');
$pdoResult->execute(array(':id' => '%%' ));
while($row = $pdoResult->fetch(PDO::FETCH_ASSOC)) {
$Gid = $row['id'] ;
$Ged = $row['gedcomnummer'] ;
if ($Ged =='') {$Ged =='0';}
$update_query = "UPDATE db_bidprentjes SET gedcomnummer='$Ged' WHERE id=:id";
$pdoResult= $pdoConnect->prepare($update_query);
Echo " - ".$Gid." ".$Ged." <br>";
} // while
} // einde try
catch(PDOException $e){
echo $e->getMessage(); }
?>
// Verbind met database
try
{
$pdoResult = $pdoConnect->prepare("SELECT * FROM db_bidprentjes WHERE id LIKE :id ");
$pdoResult->bindValue(':id', '%%');
$pdoResult->execute(array(':id' => '%%' ));
while($row = $pdoResult->fetch(PDO::FETCH_ASSOC)) {
$Gid = $row['id'] ;
$Ged = $row['gedcomnummer'] ;
if ($Ged =='') {$Ged =='0';}
$update_query = "UPDATE db_bidprentjes SET gedcomnummer='$Ged' WHERE id=:id";
$pdoResult= $pdoConnect->prepare($update_query);
Echo " - ".$Gid." ".$Ged." <br>";
} // while
} // einde try
catch(PDOException $e){
echo $e->getMessage(); }
?>
Gewijzigd op 13/12/2018 18:46:43 door Theo Huitema
Regel 14 uitvoeren is dan voldoende.
Dit soort dingen kan je oefenen in phpMyAdmin of gelijke client.
Gewijzigd op 13/12/2018 15:26:24 door Adoptive Solution
De controle op een waarde doe ik met -> if ($Ged =='') {$Ged =='0';}
Maar hoe maak ik zo'n loop dat de while statement alle records doorloopt?
En aangenomen dat id een indexnummer is kan je het record daarmee terugvinden.
Quote:
UPDATE db_bidprentjes SET gedcomnummer='$Ged' WHERE id=:id
Is ook niet het idee van prepared statements...
Daarbij, je prepare-d de UPDATE-query weliswaar, maar je kent nergens een waarde toe aan de :id in die query, noch voer je de query uit met een execute. Of was dit eerst om te testen of dit werkt voordat je de update daadwerkelijk ging uitvoeren?
Overigens is dit:
Quote:
WHERE id LIKE :id
nogal onzinnig. Bij id's zou je niet te hoeven "raden", een id is er juist voor dat je een record direct -op een deterministische manier- kunt aanwijzen.
Een veel betere WHERE-conditie is die van @Adoptive:
Adoptive Solution op 13/12/2018 15:48:10:
Zoek naar alle record waar gedcomnummer leeg is ipv id = %%
Want dat zijn de records die je wilt updaten.
EDIT: Sterker nog, zou je dit niet met één query kunnen doen, zonder loop?
UPDATE <tabel> SET <te_wijzigen_kolom> = <gewenste_waarde> WHERE <te_wijzigen_kolom> = <ongewenste_waarde>
of
WHERE <te_wijzigen_kolom> != <gewenste_waarde>
ofzo?
Gewijzigd op 13/12/2018 16:23:06 door Thomas van den Heuvel
Code (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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
// Verbind met database
$Zged='';
try
{
$pdoResult = $pdoConnect->prepare("SELECT * FROM db_bidprentjes WHERE gedcomnummer LIKE :gedcomnummer");
$pdoResult->bindValue(':gedcomnummer', $Zged);
$pdoResult->execute(array(':gedcomnummer' => $Zged ));
while($row = $pdoResult->fetch(PDO::FETCH_ASSOC)) {
$Gid = $row['id'] ;
$Ged = '0';
$update_query = "UPDATE db_bidprentjes SET gedcomnummer=$Ged WHERE id=:id ";
$pdoResult= $pdoConnect->prepare($update_query);
Echo " - ".$Gid." - ".$Ged." <br>";
} // while
} // einde try
catch(PDOException $e){
echo $e->getMessage(); }
?>
// Verbind met database
$Zged='';
try
{
$pdoResult = $pdoConnect->prepare("SELECT * FROM db_bidprentjes WHERE gedcomnummer LIKE :gedcomnummer");
$pdoResult->bindValue(':gedcomnummer', $Zged);
$pdoResult->execute(array(':gedcomnummer' => $Zged ));
while($row = $pdoResult->fetch(PDO::FETCH_ASSOC)) {
$Gid = $row['id'] ;
$Ged = '0';
$update_query = "UPDATE db_bidprentjes SET gedcomnummer=$Ged WHERE id=:id ";
$pdoResult= $pdoConnect->prepare($update_query);
Echo " - ".$Gid." - ".$Ged." <br>";
} // while
} // einde try
catch(PDOException $e){
echo $e->getMessage(); }
?>
De echo geeft : - 352 - 0
Dus eerste lege record is nr 352, de waarde Ged$ is nul.
Maar het veld wordt niet bijgewerkt, in phpmyadmin blijft veld (varchar(15)) leeg.
Ook stopt het bij record 352, de overige records loopt hij niet door.
id is inderdaad primaire sleutel en index.
Zie mijn bovenstaande reactie met toevoeging.
De update doet het niet.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$Zged='';
try
{
$pdoResult = $pdoConnect->prepare("SELECT * FROM db_bidprentjes WHERE gedcomnummer LIKE :gedcomnummer");
$pdoResult->bindValue(':gedcomnummer', $Zged);
$pdoResult->execute(array(':gedcomnummer' => $Zged ));
while($row = $pdoResult->fetch(PDO::FETCH_ASSOC)) {
$update_query = "UPDATE db_bidprentjes SET gedcomnummer='0' WHERE gedcomnummer='' ";
$pdoResult= $pdoConnect->prepare($update_query);
} // while
} // einde try
catch(PDOException $e){
echo $e->getMessage(); }
?>
$Zged='';
try
{
$pdoResult = $pdoConnect->prepare("SELECT * FROM db_bidprentjes WHERE gedcomnummer LIKE :gedcomnummer");
$pdoResult->bindValue(':gedcomnummer', $Zged);
$pdoResult->execute(array(':gedcomnummer' => $Zged ));
while($row = $pdoResult->fetch(PDO::FETCH_ASSOC)) {
$update_query = "UPDATE db_bidprentjes SET gedcomnummer='0' WHERE gedcomnummer='' ";
$pdoResult= $pdoConnect->prepare($update_query);
} // while
} // einde try
catch(PDOException $e){
echo $e->getMessage(); }
?>
Code (php)
1
2
3
2
3
$update_query = "UPDATE db_bidprentjes SET gedcomnummer='0' WHERE gedcomnummer='' ";
$pdoResult = $pdoConnect->prepare($update_query);
$pdoResult->execute();
$pdoResult = $pdoConnect->prepare($update_query);
$pdoResult->execute();
Handleiding waaruit de inspiratie komt :
https://www.w3schools.com/php/php_mysql_update.asp
Code (php)
1
2
3
4
5
2
3
4
5
$sql = "UPDATE MyGuests SET lastname='Doe' WHERE id=2";
// Prepare statement
$stmt = $conn->prepare($sql);
// execute the query
$stmt->execute();
// Prepare statement
$stmt = $conn->prepare($sql);
// execute the query
$stmt->execute();
Gewijzigd op 13/12/2018 17:30:24 door Adoptive Solution
PDO::query(), een prepare() is niet nodig.
En als je er over nadenkt is dit een eenmalige wijziging, dus een rechtstreekse query in phpMyAdmin of een mysql shell zou veel logischer zijn, hier hoeft verder geen letter (PHP-)code voor aan te pas te komen, het is namelijk geen complexe conversie ofzo, maar een eenmalige omzetting.
Je zou zelfs rechtstreeks een query kunnen uitvoeren met En als je er over nadenkt is dit een eenmalige wijziging, dus een rechtstreekse query in phpMyAdmin of een mysql shell zou veel logischer zijn, hier hoeft verder geen letter (PHP-)code voor aan te pas te komen, het is namelijk geen complexe conversie ofzo, maar een eenmalige omzetting.
Gewijzigd op 13/12/2018 18:08:53 door Thomas van den Heuvel
Had ik ook al geprobeerd Thomas. Het lukte wel in phpadmin om een veld met waarde wijzigen, maar niet om een veld met NULL.
Badankt Adoptive en Thomas daarmee lukte het