Les querys "INSERT" ne fonctionnent pas sur mon CMS.

Résolu
M3NSONG3 Messages postés 615 Date d'inscription   Statut Membre Dernière intervention   -  
M3NSONG3 Messages postés 615 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'utilise un cms que j'avais développer qui marchait très bien, puis j'ai changé d'hebergeur, et là c'est le drame. J'ai l'impression qu'aucune de mes querys INSERT ne marchent, aucune erreur, quelqu'un aurait une idée ?

Je suis sous Debian8 avec apache2.

Exemple de query :
bdd('player_alpha')->exec("INSERT INTO item (owner_id, window, pos, count, vnum,socket0,socket1,socket2) VALUES (" . $_SESSION['id'] . ", 'MALL', '$pos', '$nb_item', '$item','1','1','1')");


Alors que les querys SELECT marchent très bien, exemple :

("SELECT flag FROM item_proto WHERE vnum = '$item' ");

3 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Tu utilises quoi PDO ou mysqli ?
Ensuite... as tu essayé de faire un ECHO de la requête pour voir ce qu'elle contient exactement ?
As tu ensuite testé cette requête DIRECTEMENT dans ta bdd (via phpmyadmin par exemple) ?

1
M3NSONG3 Messages postés 615 Date d'inscription   Statut Membre Dernière intervention   162
 
J'utilise PDO. Oui j'ai fais des echos, ma requète contient toute les infos, et oui elle marche si je la lance de Navicat !


Cordialement.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Déjà... il faut commencer par ACTIVER la gestion des erreurs PDO dans la chaine de connexion
Puis... placer CHACUNE de tes requêtes dans des blocs TRY/CATCH.

Voir ici comment faire proprement :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs


.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Ah .. et puis... vu que tu utilises PDO .. il serait temps de passer aux requêtes préparées pour éviter les soucis d'injection SQL...
Dans l'idéal, ta requête s'écrirait ainsi :
//récupération PROPRE des variables AVANT de les utiliser !
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;



//préparation de la requête et des variables
 $sql = "INSERT INTO item (owner_id, window, `pos`, `count`, vnum,socket0,socket1,socket2) 
                   VALUES (:id, :window, :pos, :nb_item,:vnum,socket0,:socket1,:socket2)";

 $datas = array(':id'=>$id,
                ':window' =>'MALL',
                ':pos' =>$pos,
                ':nb_item' =>$nb_item,
                ':vnum' =>$item,
                ':socket0' =>1,
                ':socket1' =>1,
                ':socket2' =>1
                );

//Execution de la requete
try{
  $requete = $bdd -> prepare($sql) ;
  $requete->execute($datas) ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}

0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Salut,

As tu essayer de gérer le retour de la méthode exec pour afficher l'éventuel message d'erreur ?
Par exemple :

$pdo = bdd('player_alpha');

$result = $pdo->exec("INSERT INTO item (owner_id, window, pos, count, vnum,socket0,socket1,socket2) VALUES (" . $_SESSION['id'] . ", 'MALL', '$pos', '$nb_item', '$item','1','1','1')");

if ($result === false) {
    print_r($pdo->errorInfo());
} else {
    echo 'Insertion réussie';
}


Bonne journée,
1
M3NSONG3 Messages postés 615 Date d'inscription   Statut Membre Dernière intervention   162
 
Merci de vos réponses !
Après une vérification, les erreurs PHP ne s'affichent pas (j'ai essayé d'enlever un ; pour vérifier) Comment puis-je les remettre ? c'est un bout de code que j'avais ajouté ? (ça fait très très très longtemps que j'ai pas touché, et comme j'ai appris beaucoup de langage pendant ce temps là, j'ai des trous de mémoire).


(J'ai aussi remarqué que le code ce stop net sur les querys avec INSERT.)
Merci de votre aide !

Cordialement, M3NSONG3 !
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Pour activer l'affichage des erreurs PHP :
error_reporting(E_ALL);
ini_set('display-errors','on');

0
M3NSONG3 Messages postés 615 Date d'inscription   Statut Membre Dernière intervention   162
 
Merci, mais même avec ça je n'obtiens toujours aucune erreur :/

Si j'enlève par exemple un point virgule, la page ne s'affiche pas, mais sans erreur.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > M3NSONG3 Messages postés 615 Date d'inscription   Statut Membre Dernière intervention  
 
Dans ce cas faut regarder dans les paramètres du serveur. (dans le php.ini)

et.. à tout hasard.. si tu regardes dans le code source (le code source GENERE )de la page (via ton navigateur, lorsque la page s'affiche... ) si tu ne pourrais pas y voir l'erreur ??
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
Au pire, vérifie aussi dans le phpinfo les paramètres d'affichage des erreurs php.
0
Pitet Messages postés 2826 Date d'inscription   Statut Membre Dernière intervention   527
 
Si tu as une erreur de syntaxe php (point virgule manquant par exemple), PHP ne pourra alors pas exécuter ton fichier.
Si tu as activer l'affichage des erreurs dans ce même fichier, alors cette activation ne sera pas prise en compte à cause de l'erreur de syntaxe.

Même si les erreurs ne sont pas affichées (ce qui est mieux si le site est en ligne), elles devraient au moins être enregistrées dans le journal d'erreur de ton serveur web.
0