Reacties op het script MySQL INSERT en UPDATE functie
|
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.:
// voer query uit - onderdruk foutmeldingen
@mysql_query($je_query);
// traden er fouten op?
if(mysql_error() != "")
{
// foutafhandeling
...
// stel return-waarde in op false of andere "errorcode"
$ret = false;
}
else
{
// alles ging blijkbaar goed - geeft hier meer info over resultaat
// denk aan insert_id, affected_rows etc.
$ret = true;
}
// retourneer "feedback"
return $ret;
// voer query uit - onderdruk foutmeldingen // traden er fouten op? { // foutafhandeling ... // stel return-waarde in op false of andere "errorcode" $ret = false; } else { // alles ging blijkbaar goed - geeft hier meer info over resultaat // denk aan insert_id, affected_rows etc. $ret = true; } // retourneer "feedback" return $ret;
|
|
|
|
Gepost op: 27 juli 2006 - 17:25 |
|
|
|
PHP beginner
|
Je bedoeld zoiets:
<?php
function mysql_insert($tabel, $insert)
{
$values = array_values($insert);
$values2 = array();
foreach($values as $value)
{
if (is_numeric($value))
{
$values2[] = $value;
}
else
{
$values2[] = "'".mysql_escape_string($value)."'";
}
}
$velden = implode(array_keys($insert), ', ');
$values = implode($values2, ', ');
$query = @mysql_query("INSERT INTO ".$tabel." (".$velden.") VALUES (".$values.")");
if ($query)
{
return true;
}
else
{
return(die("<b>MySQL error</b><br>".mysql_errno().": ".mysql_error()));
}
}
function mysql_update($tabel, $update, $where)
{
$update2 = array();
foreach($update as $key => $value)
{
if (is_numeric($value))
{
$update2[] = $key."=".$value;
}
else
{
$update2[] = $key."='".mysql_escape_string($value)."'";
}
}
$where2 = array();
foreach($where as $key => $value)
{
if (is_numeric($value))
{
$where2[] = $key."=".$value;
}
else
{
$where2[] = $key."='".mysql_escape_string($value)."'";
}
}
$update = implode($update2, ', ');
$where = implode($where2, ' AND ');
$query = @mysql_query("UPDATE ".$tabel." SET ".$update." WHERE ".$where);
if ($query)
{
return true;
}
else
{
return(die("<b>MySQL error</b><br>".mysql_errno().": ".mysql_error()));
}
}
?>
<?php function mysql_insert($tabel, $insert) { foreach($values as $value) { { $values2[] = $value; } else { } } $query = @mysql_query("INSERT INTO ".$tabel." (".$velden.") VALUES (".$values.")"); if ($query) { return true; } else { } } function mysql_update($tabel, $update, $where) { foreach($update as $key => $value) { { $update2[] = $key."=".$value; } else { } } foreach($where as $key => $value) { { $where2[] = $key."=".$value; } else { } } $where = implode($where2, ' AND '); $query = @mysql_query("UPDATE ".$tabel." SET ".$update." WHERE ".$where); if ($query) { return true; } else { } } ?>
|
|
|
|
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:
$query = "INSERT INTO ".$tabel." (".$velden.") VALUES (".$values.")";
@mysql_query($query);
if(mysql_error() == "")
{
// geen errors - retourneer het zojuist geinserte id (of true)
return true;
}
else
{
// error handling, log hier $query in bestand, mail de webmaster, whatever
// ...
// redirect naar een nette foutmeldingspagina
header("Location: woops.html");
// stop uitvoering van de rest van het script
exit();
}
$query = "INSERT INTO ".$tabel." (".$velden.") VALUES (".$values.")"; { // geen errors - retourneer het zojuist geinserte id (of true) return true; } else { // error handling, log hier $query in bestand, mail de webmaster, whatever // ... // redirect naar een nette foutmeldingspagina header("Location: woops.html"); // stop uitvoering van de rest van het script }
regel 65-74 van update-functie wordt:
$query = "UPDATE ".$tabel." SET ".$update." WHERE ".$where;
@mysql_query($query);
if(mysql_error() == "")
{
// geen errors - retourneer het aantal aangepaste rijen
return mysql_affected_rows();
}
else
{
// error handling, log hier $query in bestand, mail de webmaster, whatever
// ...
// redirect naar een nette foutmeldingspagina
header("Location: woops.html");
// stop uitvoering van de rest van het script
exit();
}
$query = "UPDATE ".$tabel." SET ".$update." WHERE ".$where; { // geen errors - retourneer het aantal aangepaste rijen } else { // error handling, log hier $query in bestand, mail de webmaster, whatever // ... // redirect naar een nette foutmeldingspagina header("Location: woops.html"); // stop uitvoering van de rest van het script }
En ik mis nog steeds een delete-functie... |
|
|
|
Gepost op: 28 juli 2006 - 12:01 |
|
|
|
PHP interesse
|
het gevolg van jouw functie is ook dat er '' apostrofs rond jouw integers staan. Is ook niet echt de bedoeling, dacht ik. |
|
|
|
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! |
|
|
|
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)
//Data uit db verwijderen
function delete($tabel, $where)
{
$where2 = array();
foreach($where as $key => $value)
{
$where2[] = $key."='".mysql_escape_string($value)."'";
}
$where = implode($where2, ' AND ');
$this->db->query("DELETE FROM ".$tabel." WHERE ".$where) or die ("Data kon niet worden verwijdert!<br/>". mysql_error());
return true;
}
//Data uit db verwijderen function delete($tabel, $where) { foreach($where as $key => $value) { } $where = implode($where2, ' AND '); $this->db->query("DELETE FROM ".$tabel." WHERE ".$where) or die ("Data kon niet worden verwijdert!<br/>". mysql_error()); return true; }
|
|
|
Enkel aanvullende informatie, vragen en antwoorden op vragen zijn welkom. |
|
|
|