J'ai supprimé environ 80 % de son code, tout le code sans rapport avec ma question a été supprimé et il ne reste que la quantité qui me permet de tester cette classe sans toucher à une vraie base de données.
Cette classe possède quelques méthodes qui vous permettent de définir une clé et une valeur, puis de les transformer en une requête sql mysql UPDATE et INSERT en utilisant un tableau. J'essaie de comprendre comment utiliser ce code à 100% afin de pouvoir utiliser cette fonctionnalité pour les UPDATE et INSERTS dans ma propre application.
En gros, d'après ce que j'ai compris, vous faites quelque chose comme ça...
// assign some key/values to insert into DB
$db->assign('name', 'dfgd');
$db->assign('age', 87);
$db->assign('sex', 'female');
$db->assign('user_id', 4556);
// Do the insert
$db->insert('testing2');
Là où je suis confus, c'est que je peux continuer à exécuter un code comme celui-ci encore et encore sur la page et il utilisera toujours le jeu correct de tableaux de clés/valeurs. Ci-dessus, vous pouvez voir que j'ai utilisé la méthode assign() 4 fois et que j'ai ensuite appelé la méthode insert() qui crée ceci
INSERT INTO test (name, age, sex, user_id) VALUES (jason davis, 26, male, 5345)
Maintenant si je fais un autre jeu comme ça sur la même page...
// assign some key/values to insert into DB
$db->assign('name', 'dfgd');
$db->assign('age', 87);
$db->assign('sex', 'female');
$db->assign('user_id', 4556);
// Do the insert
$db->insert('testing2');
Il crée ensuite ce...
INSERT INTO testing2 (name, age, sex, user_id) VALUES (dfgd, 87, female, 4556)
Comment ne pas combiner les deux ensembles de 4, de sorte qu'au lieu d'insérer 8 enregistrements lors de la deuxième insertion, il remplace complètement le premier ensemble de 4 valeurs par le nouvel ensemble. C'est génial et c'est ce que je veux, mais je ne comprends pas comment cela se passe ? Peut-on l'améliorer de toute façon ?
Vous trouverez ci-dessous une classe complète et mon code de démonstration, il peut être exécuté sans avoir besoin de se connecter à mysql pour cette démo, il imprimera à l'écran le SQL qu'il construit.
De plus, où se trouve le fonction publique reset() dans le code ci-dessous doit être utilisé à, ou ne serait-il pas nécessaire ?
<?php
class DB{
public $fields;
public function assign($field, $value){
$this->fields[$field] = ($value)==""?("'".$value."'"):$value;
}
public function assign_str($field, $value){
$this->fields[$field] = "'".addslashes($value)."'";
}
public function reset(){
$this->fields = array();
}
public function insert($table){
$f = "";
$v = "";
reset($this->fields);
foreach($this->fields as $field=>$value){
$f.= ($f!=""?", ":"").$field;
$v.= ($v!=""?", ":"").$value;
}
$sql = "INSERT INTO ".$table." (".$f.") VALUES (".$v.")";
//print SQL to screen for testing
echo $sql;
//$this->query($sql);
return $this->insert_id();
}
public function update($table, $where){
$f = "";
reset($this->fields);
foreach($this->fields as $field=>$value){
$f.= ($f!=""?", ":"").$field." = ".$value;
}
$sql = "UPDATE ".$table." SET ".$f." ".$where;
echo $sql;
//$this->query($sql);
}
public function query($_query){
$this->query = $_query;
$this->result = @mysql_query($_query, $this->link_id) or die( $_query."<p>".mysql_error($this->link_id) );
return $this->result;
}
public function insert_id(){
return @mysql_insert_id($this->link_id);
}
}
// start new DB object
$db = new DB;
// assign some key/values to insert into DB
$db->assign('name', 'jason davis');
$db->assign('age', 26);
$db->assign('sex', 'male');
$db->assign('user_id', 5345);
// Do the insert
$db->insert('test');
echo '<hr />';
// assign some key/values to insert into DB
$db->assign('name', 'dfgd');
$db->assign('age', 87);
$db->assign('sex', 'female');
$db->assign('user_id', 4556);
// Do the insert
$db->insert('testing2');
echo '<hr />';
// assign some key/values to UPDATE the DB
$db->assign('name', 'jason davis');
$db->assign('age', 26);
$db->assign('sex', 'male');
$db->assign('user_id', 5345);
// DO the DB UPDATE
$db->update('blogs', 'WHERE user_id = 23');
?>