PDOException' with message 'SQLSTATE[42000] - PHP - Programmation
Marsh Posté le 15-02-2013 à 17:28:34
Ce serait pas du aux quotes autour de CHAUSSUR qui fermeraient la requête?
Marsh Posté le 15-02-2013 à 18:57:58
Bonsoir,
C'est aussi ce que je ne comprends pas, c'est censé me renvoyer la valeur chaussure… mais ça la tronque. J'ai essayé avec une autre colonne du csv et ça fait de même.
Marsh Posté le 15-02-2013 à 22:12:35
Vérifie si reference ne doit pas être un id, et plus largement si il est apte à recevoir un tel format de données d'après la définition du type de la colonne.
Sinon essaye ça :
$creproreq = "INSERT INTO ps_product(reference, price, wholesale_price) VALUES(?, ?, ?)";
$crepro=$bdd->prepare($creproreq);
$crepro->execute(array($ligne[17], $ligne[5], $ligne[14]));
Marsh Posté le 16-02-2013 à 09:48:06
Bonjour,
Merci, de cette façon là ça marche. J'avais pourtant essayé les points d’interrogations après avoir posté ici mais avec le même résultat. La différence venant d'après.
Code :
|
Marsh Posté le 16-02-2013 à 15:31:07
Bonjour,
J'ai encore et exactement le même soucis. Je ne comprends pas pourquoi la valeur se tronque. J'ai modifié la réquéte pour n'écrire que si la reference n'existe pas.
Code :
|
J'ai donc pris la requête qui marchait en y ajoutant la condition WHERE NOT EXISTS. J'ai essayé aussi avec de simples requêtes comptant le nombre de ligne mais même problème de tronquage (ici ça le fait même avant CHAUSS). Le CSV donne un nom complet avec espace (mais ça coupe avant même la fin du premier mot de cette colonne) avec séparation par des ;.
J'ai donc encore une fois exactement la même erreur. Pourtant je ne vois pas ou je ne ferme pas ni ce qui peut clocher (pourtant il y a forcément quelque chose qui ne va pas ).
Merci encore.
Marsh Posté le 16-02-2013 à 16:33:00
Je connais pas trop, mais les ; sont pas obligatoires avec les requêtes préparées ?
Je pense que c'est ça ton problème, ajoute des ; à chacune de tes requêtes.
Marsh Posté le 16-02-2013 à 17:11:49
Elles y sont ou alors je ne vois pas ou tu dis d'en mettre d'autres.
Marsh Posté le 16-02-2013 à 17:27:20
Tu en as mis pour le php oui, mais pas dans ton sql pour valider tes requêtes.
Donc :
Code :
|
Idem pour toutes tes autres requêtes.
Marsh Posté le 16-02-2013 à 18:01:13
Ça donne une requête bizarre avec la même erreur.
Code :
|
Code :
|
Marsh Posté le 16-02-2013 à 18:17:48
Ah mais non, faut pas en mettre au milieu de ta requête
Le ; sert à valider une requête, tout comme le ; sert à valider une instruction en php.
il doit évidemment se situer uniquement en fin de requête, tout comme tu le ferais avec mysql utilisé dans une console dos ou un terminal linux pour valider tes instructions.
Marsh Posté le 16-02-2013 à 18:28:00
Han.
Donc il y a toujours une erreur avec "tronquage" de la dernière variable mais elle est bien fermée par des apostrophes cette fois-ci.
Code :
|
Code :
|
J'ai essayé en mettant $ligne[2] à la place de $ligne[17] pour voir qui dans le fichier à la même valeur cette fois ci histoire de voir. Mais ça ne change rien.
Marsh Posté le 16-02-2013 à 18:43:23
Normal, NOT EXISTS s'utilise dans les requêtes select pas dans les insert.
Marsh Posté le 16-02-2013 à 18:49:43
Si c'est pour garantir une contrainte d'unicité met ta colonne reference en primary key ou en unique, du moins si ta table est en innodb, sinon, bah faut que tu fasses une requête count au préalable pour tester si ta valeur est déjà dans ta table.
Marsh Posté le 16-02-2013 à 21:09:38
Oui c'est pour ça. En cherchant avec une clé unique ça marche et ça simplifie bien la chose.
Code :
|
Merci.
Marsh Posté le 05-03-2013 à 01:28:44
Bonjour,
Je reviens ici pour une question concernant cette erreur encore. Pas de problème ici. Enfin je voudrai juste comprendre pourquoi elle apparait dans ce cas là.
Je tape la requête sous notepad++. J'enregistre, je test sur le serveur et l'erreur apparait. Je vérifie sous phpmyadmin là requête (sait-on jamais) donc je colle la requête. Et il me sort la même erreur. Hors dans la requête il n'y a pas d'erreur (j'ai quand même regardé 3 bonnes minutes en appuyant de manière frénétique sur exécuter ). Je la retape manuellement dans phpmyadmin et l’exécute. Ça passe, pourtant c'était exactement la même requête rien n'avait changé. Je refais la même chose sous notepad++ et ça marche à son tour.
Savez vous d'où peut provenir ce genre d'erreur ?
Merci à vous !
Marsh Posté le 29-07-2013 à 01:03:54
Ça arrive surtout aux routeux
Marsh Posté le 15-02-2013 à 13:46:20
Bonjour,
Je tourne en boucle depuis un moment pour une erreur qui est surement très con mais je ne la trouve pas.
J'ai essayé deux méthodes et j'obtiens à chaque fois la même erreur, je pense que l'erreur proviendrai de la requête SQL mais je n'en suis pas sur. Voici le bout de code incriminé par l'erreur.
La seconde méthode est en commentaire au milieu et j'enlève la fin lors de celle ci. Le if est fermé plus tard à la suite de d'autres requêtes. Le ligne 40 corresponds à l'execute.
J'ai donc l'erreur suivante
Je vous remercie de toute l'aide que vous m'apporterez.