[Résolu] Problème insertion de donnée

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour à toutes et tous,

Encore et toujours dans un contexte de développement de module... aujourd'hui je coince sur une requête sql.

Je souhaiterais faire un INSERT des données que j’envoie avec le formulaire du module.

Je les reçois bien et je les tris, voilà ce que çà donne juste avant de soumettre les données à db_queries :

$fields_val = array (size=9)
  'name' => string 'Test flux' (length=9)
  'url' => string 'hello' (length=5)
  'tag' => string '12' (length=2)
  'provider' => string 'FranceTVInfo' (length=12)
  'provider_slug' => string 'francetvinfo' (length=12)
  'interval' => int 21600
  'last_import' => int 1410184665
  'next_import' => int 1410206265
  'state' => int 1

J'ai bien formaté chaque valeurs pour quels soit conforme au champs de la bdd.

Donc ensuite je fais :

$recordid = db_insert('tamtam_imports')->fields(array_keys($fields_val))->values($fields_val)->execute();

et là : BOOM, du rouge partout... un bon message d'erreur :

"PDOException : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval, last_import, next_import, state) VALUES ('Test flux', 'hello', '12', '' at line 1: INSERT INTO {tamtam_imports} (name, url, tag, provider, provider_slug, interval, last_import, next_import, state) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8); Array ( [:db_insert_placeholder_0] => Test flux [:db_insert_placeholder_1] => hello [:db_insert_placeholder_2] => 12 [:db_insert_placeholder_3] => France 24 [:db_insert_placeholder_4] => france24 [:db_insert_placeholder_5] => 21600 [:db_insert_placeholder_6] => 1410185465 [:db_insert_placeholder_7] => 1410207065 [:db_insert_placeholder_8] => 1 ) dans tamtamimporter_modules_admin_submit() (ligne 279 dans C:\wamp\www\letamtam\sites\all\modules\mes_modules\tamtamimporter_modules\tamtamimporter_modules.module)."

J'ai aussi essayé de faire directement ceci :
$recordid = db_insert('tamtam_imports')->fields($fields_val)->execute();
mais ça ne fonctionne pas non plus... qui peut me mettre sur la bonne piste ??

Dans d'autres contextes je suis capable de régler facilement ce genre de problème mais là franchement je ne vois pas !

Si personne ne peut m'apporter de solution à courte terme, je pense que je vais passer directement par l'objet PDO, dans ce cas il faut que je créé une nouvelle instance, donc il me faudrait les données de connexion à la bdd, comment mon script peut les récupérer ?

Merci d'avance pour votre aide.

Mickael

Forum : 

Aii... c'est ce que j'ai fais en fait, je me suis juste planté dans mon copier-coller. Je vais éditer le post si je peux.

De toute façon le résultat est le même :

"PDOException : SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'interval, last_import, next_import, state) VALUES ('Test flux', 'hello', '6', 'F' at line 1: INSERT INTO {tamtam_imports} (name, url, tag, provider, provider_slug, interval, last_import, next_import, state) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8); Array ( [:db_insert_placeholder_0] => Test flux [:db_insert_placeholder_1] => hello [:db_insert_placeholder_2] => 6 [:db_insert_placeholder_3] => FranceTVInfo [:db_insert_placeholder_4] => francetvinfo [:db_insert_placeholder_5] => 21600 [:db_insert_placeholder_6] => 1410187763 [:db_insert_placeholder_7] => 1410209363 [:db_insert_placeholder_8] => 1 ) dans tamtamimporter_modules_admin_submit() (ligne 283 dans C:\wamp\www\letamtam\sites\all\modules\mes_modules\tamtamimporter_modules\tamtamimporter_modules.module)."

Bon...

1) Mon problème de syntaxe venait du fait que j'utilise comme nom de champs le terme "interval" , qui est un mot clef réservé en SQL;

2) Les données de connexion à la base de données MySQL sont contenus dans la variable global $databases;