Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
après plusieurs tests j'ai bien l'impression d'être en face d'un bug
Contexte:
J'essaye d'insérer dans ma table 'xml' (composé des champs xml_id [clé primaire auto incrémentée], xml_content, xml_url, flux_id) à l'aide d'un tableau de données $data.
Version sans champ flux_id précisé = 100 enregistrements insérés en base
foreach($items_internet as $key => $values)
{
$data = array(
'xml_content' => $items_internet[$key]["xml"],
'xml_url' => $keys
);
$db->insert('xml', $data);
}
Version sans champ flux_id précisé, dans un bloc try, 50 enregistrements insérés en base
foreach($items_internet as $key => $values)
{
$data = array(
'xml_content' => $items_internet[$key]["xml"],
'xml_url' => $key
);
try {
$db->insert('xml', $data);
}catch(Zend_Db_Exception $db)
{
echo "Message: " . $db->getMessage() . "\n";
}catch(Zend_Exception $e)
{
echo "Message: " . $e->getMessage() . "\n";
}
}
Version avec champ flux_id précisé (ce champ n'est pas la clé primaire), 50 enregistrements insérés en base
foreach($items_internet as $key => $values)
{
$data = array(
'xml_content' => $items_internet[$key]["xml"],
'xml_url' => $key,
'flux_id' => $items_internet[$key]["id"]
);
$db->insert('xml', $data);
}
Mon tableau est composé de 50 items.
Une idée sur la cause de ces doublons ?
Hors ligne
ben comme ça on n'a pas beaucoup d'éléments
que contient ton tableau ???
Hors ligne
Voici un peu plus de précisions
Mon tableau contient 50 éléments, c'est en fait des items de flux rss.
Il est indicé par les URLs des items de flux et contient, pour chaque item, son fragment XML et l'ID du flux auquel il se rapporte.
Voici la structure du tableau
Array
(
[url de l'item] => Array
(
[contenu xml de l'item] =>
[id du flux de l'item] =>
(...)
Voici un extrait de la structure du tableau :
Array
(
[http://www.clubic.com/actualite-288740-msi-oc-genie-overclock-automatique-mere.html] => Array
(
[xml] => <item>
<title>MSI OC Genie : overclocking automatique sur carte mère</title>
<description>Les futures cartes mère P55 du taïwanais MSI inaugureront un nouveau dispositif d'overclocking automatique du processeur. Baptisé OC Genie, il consiste en une puce ajoutée aux circuits de la carte, capable [...]</description>
<link>http://www.clubic.com/actualite-288740-msi-oc-genie-overclock-automatique-mere.html</link>
<guid>http://www.clubic.com/actualite-288740-msi-oc-genie-overclock-automatique-mere.html</guid>
<pubDate>Fri, 17 Jul 2009 16:19:33 +0200</pubDate>
<category>Carte Mère</category>
</item>
[id] => 4
)
[http://www.clubic.com/actualite-288738-street-fighter-iv-mods-pc-jouent-dlc.html] => Array
(
[xml] => <item>
<title>Street Fighter IV : les mods PC se jouent des DLC ?</title>
<description>La sortie de Street Fighter IV sur PC nous a prouvé, s'il en était besoin, que la « baston » n'était pas réservée aux seuls joueurs consoles. Elle nous permet aussi de mesurer le fossé qui existe encore [...]</description>
<link>http://www.clubic.com/actualite-288738-street-fighter-iv-mods-pc-jouent-dlc.html</link>
<guid>http://www.clubic.com/actualite-288738-street-fighter-iv-mods-pc-jouent-dlc.html</guid>
<pubDate>Fri, 17 Jul 2009 16:05:51 +0200</pubDate>
<category>Annonce</category>
</item>
[id] => 4
)
[http://www.clubic.com/actualite-288688-insolite-outil-world-warcraft-iphone.html] => Array
(
[xml] => <item>
<title>Insolite : un outil World Of WarCraft sur iPhone</title>
<description>S'il n'est pas encore question de jouer véritablement à World Of WarCraft sur son iPhone, un petit utilitaire assez étonnant a fait son apparition sur l'AppStore. L'Armurerie Mobile de World Of WarCraft, [...]</description>
<link>http://www.clubic.com/actualite-288688-insolite-outil-world-warcraft-iphone.html</link>
<guid>http://www.clubic.com/actualite-288688-insolite-outil-world-warcraft-iphone.html</guid>
<pubDate>Fri, 17 Jul 2009 14:05:16 +0200</pubDate>
<category>Insolite</category>
</item>
[id] => 1
)
(...)
Hors ligne
ben déjà dans ton tableau tu as deux éléments avec l'ID 4
je crois que c'est dans les données qu'il va te falloir chercher
A+JYT
Hors ligne
Effectivement dans mon tableau j'ai deux données avec le flux id 4, j'en ai même des dizaines, tout comme l'id 1, 2, 3, etc.
Je ne vois pas ou ça poserait un problème. Ici,
foreach($items_internet as $key => $values)
{
$data = array(
'xml_content' => $items_internet[$key]["xml"],
'xml_url' => $keys
);
$db->insert('xml', $data);
}
Je fais une insertion sur la table XML. (J'ai oublié de précisé que cette table comporte plusieurs champs, dont xml_id qui est une clé primaire auto-incrémentée, xml_content, xml_url, flux_id )
Pourquoi lorsque le flux_id n'est pas précisé dans le tableau $data pour l'insertion je me retrouve avec des doublons sauf si j'inclus cette insertion dans un bloc try / catch (aucune une exception n'est levée).
Si je précise le flux_id (champ qui n'est pas une clé primaire et sur lequel aucune contrainte n'est posée) et que je ne mets pas l'insertion dans un bloc try /catch ça marche
Hors ligne