login  Naam:   Wachtwoord: 
Registreer je!
Scripts > PHP > Snippets > MySQL INSERT en UPDATE functie


Reacties op het script MySQL INSERT en UPDATE functie

Offline  Thomas
Gepost op: 27 juli 2006 - 13:45
Moderator



Hm, zelf ben ik niet zo voor het introduceren van functies die meehelpen in de opbouw van queries, maar als je erg veel inserts of updates hebt kan ik hier zeker het nut van zien.

Wat ik een beetje mis is een zinnig gebruik van de return-waarde. Wat je bij je mysql_insert-query zou kunnen returnen is het zojuist geinserte id (mysql_insert_id() - mits de query is geslaagd en de tabel een auto_increment-key heeft).
Bij je update-query zou je mysql_affected_rows() kunnen retourneren als alles goed is gegaan (en anders false).

Op eenzelfde wijze zou je een delete-functie kunnen schrijven, om het rijtje compleet te maken, en hier zou je ook mysql_affected_rows() kunnen retourneren.

Een andere uitbreiding die misschien de moeite waard is, is het meegeven van een type, zodat je onderscheid kunt maken tussen tekst en numerieke waarden, zodat je niet overal quotes omheen hoeft te zetten. Dit zal een meer esthetische ingreep zijn, maar maakt mogelijk het debuggen van queries handiger. Dit is ook een mogelijke uitbreiding: breng foutafhandeling aan binnen de functies die je queries afhandelen.

Je zou dit kunnen doen d.m.v.:
  1. // voer query uit - onderdruk foutmeldingen
  2. @mysql_query($je_query);
  3.  
  4. // traden er fouten op?
  5. if(mysql_error() != "")
  6. {
  7. // foutafhandeling
  8. ...
  9. // stel return-waarde in op false of andere "errorcode"
  10. $ret = false;
  11. }
  12. else
  13. {
  14. // alles ging blijkbaar goed - geeft hier meer info over resultaat
  15. // denk aan insert_id, affected_rows etc.
  16. $ret = true;
  17. }
  18.  
  19. // retourneer "feedback"
  20. return $ret;

Offline  WumTol
Gepost op: 27 juli 2006 - 17:25
PHP beginner



Je bedoeld zoiets:

  1. <?php
  2. function mysql_insert($tabel, $insert)
  3. {
  4. $values = array_values($insert);
  5. $values2 = array();
  6.  
  7. foreach($values as $value)
  8. {
  9. if (is_numeric($value))
  10. {
  11. $values2[] = $value;
  12. }
  13. else
  14. {
  15. $values2[] = "'".mysql_escape_string($value)."'";
  16. }
  17. }
  18.  
  19. $velden = implode(array_keys($insert), ', ');
  20. $values = implode($values2, ', ');
  21. $query = @mysql_query("INSERT INTO ".$tabel." (".$velden.") VALUES (".$values.")");
  22.  
  23. if ($query)
  24. {
  25. return true;
  26. }
  27. else
  28. {
  29. return(die("<b>MySQL error</b><br>".mysql_errno().": ".mysql_error()));
  30. }
  31. }
  32.  
  33. function mysql_update($tabel, $update, $where)
  34. {
  35. $update2 = array();
  36.  
  37. foreach($update as $key => $value)
  38. {
  39. if (is_numeric($value))
  40. {
  41. $update2[] = $key."=".$value;
  42. }
  43. else
  44. {
  45. $update2[] = $key."='".mysql_escape_string($value)."'";
  46. }
  47. }
  48.  
  49. $where2 = array();
  50.  
  51. foreach($where as $key => $value)
  52. {
  53. if (is_numeric($value))
  54. {
  55. $where2[] = $key."=".$value;
  56. }
  57. else
  58. {
  59. $where2[] = $key."='".mysql_escape_string($value)."'";
  60. }
  61. }
  62.  
  63. $update = implode($update2, ', ');
  64. $where = implode($where2, ' AND ');
  65. $query = @mysql_query("UPDATE ".$tabel." SET ".$update." WHERE ".$where);
  66.  
  67. if ($query)
  68. {
  69. return true;
  70. }
  71. else
  72. {
  73. return(die("<b>MySQL error</b><br>".mysql_errno().": ".mysql_error()));
  74. }
  75. }
  76. ?>

Offline  Thomas
Gepost op: 28 juli 2006 - 10:00
Moderator



return(die(...)) lijkt me een beetje een rare constructie. Je wilt waarschijnlijk ook een "stille" afhandeling van fouten, en niet dat je hele pagina er uit knalt (wat die() zal doen).

Ik doelde meer op een volgende oplossing - die je overigens aan de hand van bovenstaand commentaar had kunnen maken -:

regel 21-30 van insert-functie wordt:
  1. $query = "INSERT INTO ".$tabel." (".$velden.") VALUES (".$values.")";
  2. @mysql_query($query);
  3.  
  4. if(mysql_error() == "")
  5. {
  6. // geen errors - retourneer het zojuist geinserte id (of true)
  7. return true;
  8. }
  9. else
  10. {
  11. // error handling, log hier $query in bestand, mail de webmaster, whatever
  12. // ...
  13.  
  14. // redirect naar een nette foutmeldingspagina
  15. header("Location: woops.html");
  16. // stop uitvoering van de rest van het script
  17. exit();
  18. }


regel 65-74 van update-functie wordt:
  1. $query = "UPDATE ".$tabel." SET ".$update." WHERE ".$where;
  2.  
  3. @mysql_query($query);
  4. if(mysql_error() == "")
  5. {
  6. // geen errors - retourneer het aantal aangepaste rijen
  7. }
  8. else
  9. {
  10. // error handling, log hier $query in bestand, mail de webmaster, whatever
  11. // ...
  12.  
  13. // redirect naar een nette foutmeldingspagina
  14. header("Location: woops.html");
  15. // stop uitvoering van de rest van het script
  16. exit();
  17. }


En ik mis nog steeds een delete-functie...

Offline  bosgroen
Gepost op: 28 juli 2006 - 12:01
Gouden medaille

PHP interesse




het gevolg van jouw functie is ook dat er '' apostrofs rond jouw integers staan. Is ook niet echt de bedoeling, dacht ik.

Offline  ikkedikke
Gepost op: 29 juli 2006 - 14:03
PHP expert



voor de rest zijn die 2e arrays ook een beetje onnodig.(where2, update2 values2) je kan in principe gewoon de elementen van de oude array gewoon overschrijven toch?
verder leuk gedaan met die implodes op die veldijsten. misschien de mogelijkheid om bij die update de mogelijkheid om ook OR te gebruiken.
verder makkelijk en begrijpelijk geschreven!

Offline  zwobbel
Gepost op: 16 mei 2008 - 00:25
PHP gevorderde



Mensen die niet creatief zijn hier heb je een oplossing voor de delete:

(gewoon bij in de classe onderaan toevoegen)
  1. //Data uit db verwijderen
  2. function delete($tabel, $where)
  3. {
  4.  
  5. $where2 = array();
  6.  
  7. foreach($where as $key => $value)
  8. {
  9. $where2[] = $key."='".mysql_escape_string($value)."'";
  10. }
  11.  
  12. $where = implode($where2, ' AND ');
  13.  
  14. $this->db->query("DELETE FROM ".$tabel." WHERE ".$where) or die ("Data kon niet worden verwijdert!<br/>". mysql_error());
  15.  
  16. return true;
  17.  
  18. }


Enkel aanvullende informatie, vragen en antwoorden op vragen zijn welkom.
 
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.085s