Insérer null plutôt que 0000-00-00 pour des dates
Posté : 04 févr. 2019, 10:52
Bonjour à tous,
Encore moi
Je fais appelle à votre sagesse pour un problème ou je ne sais pas comment procéder.
J'ai cette fonction qui va récupérer un objet mission et l'initialiser dans un array
Dans ma base j'ai des dates de début et de fin, si elle n'existe pas dans mon objet je mets à null
Dans mon var_dump c'est ok
Par contre à la fin j'appelle ma fonction qui va mettre à jour
qui est
Le problème c'est que les dates sont mises à jour à 0000-00-00 et non à NULL . J'ai cru comprendre que c'est dû aux quotes le problème si je modifie la fonction juste pour les dates elle ne sera plus générique? Quel sont vos conseils?
Merci.
Encore moi
Je fais appelle à votre sagesse pour un problème ou je ne sais pas comment procéder.
J'ai cette fonction qui va récupérer un objet mission et l'initialiser dans un array
Code : Tout sélectionner
private function update_mission_api($mission)
{
try
{
$db = $this->db;
$crud = $this->crud;
$data = array(
'mission_competence' => $mission->competence,
'mission_depart_groupe_possible' => $mission->departGroupePossible,
'mission_numero' => $mission->numero,
'mission_description' => $mission->descriptif,
'mission_dispositif_possible' => $mission->dispositifPossible,
'mission_historique_partenaire_local' => $mission->historiquePartenaireLocal,
'mission_langues' => $mission->langues,
'mission_name' => $mission->name,
'mission_nb_beneficiaires' => $mission->nbBeneficiaire,
'mission_nb_min_volontaires' => $mission->nbMinVolontaires,
'mission_niveau_langues' => $mission->niveauLangues,
'mission_nb_max_volontaires' => $mission->nbMaxVolontaires,
'mission_objectif_justification' => $mission->objectifJustification,
'mission_profil_niveau_beneficiaires' => $mission->profilNiveauBeneficiaires,
'mission_partenaire_nom' => $mission->nomPartenaire,
'mission_pays' => $mission->pays,
'mission_thematique' => $mission->thematique,
'mission_type_beneficiaires' => $mission->typeBeneficiaires,
'mission_ville' => $mission->ville,
'mission_intervention_attendu_volontaire' => $mission->interventionAttenduVolontaire,
'mission_aeroport_arrivee' => $mission->aeroportArrivee,
'mission_accueil_transfert' => $mission->accueilTransfert,
'mission_hebergement' => $mission->hebergement,
'mission_materiel_disponible_sur_place' => $mission->materielDisponibleSurPlace,
'mission_remarque' => $mission->remarque,
'mission_motivation_attendu' => $mission->motivationAttendu
);
// update all field date
for($i= 1; $i < 5; $i++)
{
$dateDebut = (!empty($mission->datesDebuts[$i-1])) ? $mission->datesDebuts[$i-1] : NULL;
$tmp = array( 'mission_date_debut_' . $i => $dateDebut);
$data = array_merge($tmp, $data);
}
for($i= 1; $i < 21; $i++)
{
$dateFin = (!empty($mission->datesFins[$i-1])) ? $mission->datesFins[$i-1] : NULL;
$tmp = array( 'mission_date_fin_' . $i => $dateFin);
$data = array_merge($tmp, $data);
}
// get dates, dates is cleaned by main php function no need to control
echo '<pre style="background-color:black;color:white;">';var_dump( $data );echo '</pre>';
$crud->pdoUpdate('missions', $data, $db, 'mission_id_sf', $mission->idMission);
}
catch(\Exception $e)
{
echo "update_mission_api: " . $e->getMessage();
}
}Code : Tout sélectionner
for($i= 1; $i < 21; $i++)
{
$dateFin = (!empty($mission->datesFins[$i-1])) ? $mission->datesFins[$i-1] : NULL;
$tmp = array( 'mission_date_fin_' . $i => $dateFin);
$data = array_merge($tmp, $data);
}Code : Tout sélectionner
'mission_date_fin_20' => null
'mission_date_fin_19' => null
'mission_date_fin_18' => null
'mission_date_fin_17' => null
'mission_date_fin_16' => null
'mission_date_fin_15' => null
'mission_date_fin_14' => null
'mission_date_fin_13' => null
'mission_date_fin_12' => null
'mission_date_fin_11' => null
'mission_date_fin_10' => null
'mission_date_fin_9' => null
'mission_date_fin_8' => null
'mission_date_fin_7' => null
'mission_date_fin_6' => null
'mission_date_fin_5' => null
'mission_date_fin_4' => null
'mission_date_fin_3' => null
'mission_date_fin_2' => null
'mission_date_fin_1' => string '2018-12-30' (length=10)
'mission_date_debut_4' => null
'mission_date_debut_3' => null
'mission_date_debut_2' => null
'mission_date_debut_1' => string '2017-12-31' (length=10)Code : Tout sélectionner
$crud->pdoUpdate('missions', $data, $db, 'mission_id_sf', $mission->idMission);Code : Tout sélectionner
/* update data .
*
* @param string $tableName Name of the table we are inserting into.
* @param array $data An "array" containing our row data.
* @param PDO $pdoObject Our PDO object.
* @param string $idName name of id table.
* @param string $idValue id salesforce with alphanumeric caracters
* @return boolean TRUE on success. FALSE on failure.
*/
public function pdoUpdate(string $tableName, array $data, \PDO $pdoObject, string $idName, string $idValue) : bool
{
try
{
//Will contain SQL snippets.
$rowsSQL = array();
//Will contain the values that we need to bind.
$toBind = array();
$sql = "UPDATE $tableName SET ";
//Loop through our $data array.
$params = array();
$i = 0;
$len = count($data);
// construct sql
foreach($data as $columnName => $columnValue){
if(strlen($columnValue) < 1) continue;
$sql .= $columnName . ' = :' . $columnName .' ';
$param = ":" . $columnName;
$params[] = $param;
$toBind[$param] = $columnValue;
$sql .= ',';
$i++;
}
// delete last comma for avoid sql error
$sql = rtrim($sql, ',');
$sql .= " WHERE $idName = :idValue";
//Prepare our PDO statement.
$pdoStatement = $pdoObject->prepare($sql);
//Bind our values.
foreach($toBind as $param => $val){
$pdoStatement->bindValue($param, $val);
}
//bind id values
$pdoStatement->bindValue(':idValue', $idValue);
return $pdoStatement->execute();
}
catch(\PDOException $e)
{
echo "pdoUpdate: " . $e->getMessage();
}
}
Merci.