Boucle pour une requête d'insertion
Bonjour
je suis bloqué face à cette boucle permettant d'inserer des données via un fichier xml selon leur type
le fichier xml est comme ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?xml version="1.0" encoding="ISO-8859-1" ?>
<MAP name="" isArray="true">
<MAP name="__index__value__0" isArray="false">
<TIMESTAMP name="dateupload">2010-01-00T00:00:00.000</TIMESTAMP>
<STR name="encoding">flv</STR>
<STR name="filename">file_0.flv</STR>
<STR name="lastseen">USA</STR>
<UINT32 name="mediaId">0</UINT32>
<STR name="owner">JOHN</STR>
<UINT32 name="size">0</UINT32>
</MAP>
<MAP name="__index__value__1" isArray="false">
<TIMESTAMP name="dateupload">2010-01-01T00:00:01.000</TIMESTAMP>
<STR name="encoding">mp4</STR>
<STR name="filename">file_1.flv</STR>
<STR name="lastseen">USA</STR>
<UINT32 name="mediaId">1</UINT32>
<STR name="owner">PIERRE</STR>
<UINT32 name="size">11</UINT32>
</MAP>
</MAP> |
ma table est comme ça
Code:
1 2 3 4 5 6 7 8 9 10 11
| create table donnees
(
id bigserial not null primary key,
event_id bigint not null references events(id),
attribute_id integer not null references event_attribute_types(id),
bool_value boolean null,
integer_value integer null,
double_value real null,
timestamp_value timestamp without time zone null,
text_value text null
); |
je voudrrais pouvoir inserer les données dans la table selon leur type c'est a dire le type timestamp du fichier xml dans timestamp_value etc etc
j'ai fait comme ça mais sans succès
Code:
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| public function SaveAttributeValue($eventId,$attributid)
{
$connect = $this->OpenPgsqlConnect();
$xmlParsed = $this->LoadXml("file.xml");
foreach($xmlParsed as $val)
{
$tabSTR = array();
$tabTIMESTP = array();
$tabINT = array();
foreach($val->STR as $valeur)
{
$tabSTR[] = strval($valeur);
}
foreach($val->TIMESTAMP as $valeur)
{
$tabTIMESTP[] = strval($valeur);
}
foreach($val->UINT32 as $valeur)
{
$tabINT[] = strval($valeur);
}
}
$sql = "INSERT INTO event_attributes (event_id,attribute_id,bool_value,integer_value,double_value,timestamp_value,text_value) VALUES(?,?,?,?,?,?,?)";
$stmt = $connect->prepared($sql);
for($i=0;$i<count($tabINT);$i++)
{
for($j=0;$j<count($tabTIMESTP);$j++)
{
for ($k=0;$k<count($tabSTR);$k++)
{
try
{
$connect->beginTransaction();
//Insert the data in the strings table
$stmt->execute(array($eventId,$attributid,NULL,$tabINT[$i],NULL,$tabTIMESTP[$j],$tabSTR[$k]));
$connect->commit();
//return the last insert id for each insertion
$last = $connect->pgsqlLastInsertId($sql,$test);
$LastInsertIdEventType[]=$last;
} catch(PDOException $e) {
$connect->rollback();
echo 'Erreur : '.$e->getMessage().'<br />';
echo 'N° : '.$e->getCode();
}
}
}
}
} |
les paramètres seront renseignée lors de l'appel de cette methode dans une autre méthode de la classe
Code:
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 26 27
| public function SaveXml()
{
$idEvent = $this->insertIntoEvent();
$eventAttrExist = $this->EventAttributeTypeExists();
if($eventAttrExist)
{
$idOfEventsAttributeType = $this->GetEventAttributeType();
print "<pre>";
print_r($idOfEventsAttributeType);
print "</pre>";
}else{
$idOfEventAttributeTypeCreate = $this->CreateEventAttributeType();
print "<pre>";
print_r($idOfEventAttributeTypeCreate);
print "</pre>";
}
for($i=0;$i<count($idEvent);$i++)
{
for($j=0;$j<count($idOfEventAttributeTypeCreate);$j++)
{
$this->SaveAttributeValue($idEvent[$i],$idOfEventAttributeTypeCreate[$j]);
}
}
} |
Donc pour chaque insertion les autres champs pourront avoir un valeur NULL
par exemple pour le timestamp value si j'insère la date_upload du fichier xml
les autres champs seront null sauf les deux clé étrangère.
Pour la clé étrangère attribute_id j'ai du mal à faire correspondre à chaque ligne car $idOfEventAttributeTypeCreate me retourne l'id correspondant à chaque donnée du fichier xml enregistré dans une autre table : par exemple ces données sont dateupload, filename , etc du fichier xml
si vous pouvez m' eclaircire un peu sur ce probleme, je galère pendant pas mal de jour
merci