2017-09-06 13 views
0

J'ai la fonction php suivante qui soumet une requête d'insertion dans une base de données mysql. Sur le serveur de test/dev, il fonctionne à chaque fois, mais lors du clonage (l'ensemble de l'application via git) sur la machine de production, il ne renvoie aucune erreur mais ne parvient pas à insérer une ligne dans la base de données. Toutes les tables des bases de données (dev et production) sont créées en utilisant les mêmes scripts (les valeurs de données réelles stockées peuvent être différentes en raison des tests, etc.). Après la préparation, la liaison et l'exécution, je vérifie l'état de $ sql_str, qui doit être vrai ou faux. Dans chaque cas, il renvoie true et insère une nouvelle ligne sur le serveur de développement. Sur le serveur de production, il retourne toujours vrai, mais aucune ligne n'est insérée. La validation automatique est activée par défaut. Y a-t-il des cas où execute retournera pour un INSERT où aucune ligne n'est insérée?php mysqli insert fonctionne en mode développement mais pas en production, insère l'identifiant 0 sur la colonne d'incrémentation automatique

function submit_new_batch_sheet_request($bulk_liquid_code, 

$daycode, $creation_date, 
$db,$log,$session){ 

$sql_str=$db->prepare("INSERT INTO batch_sheets (batch_sheet_name, BULK_LIQUID, DAYCODE, DATE, OPERATOR_BREW) VALUES (?,?,?,?,?)"); 
$data = []; 

if(!$sql_str){ 
    $log->lwrite($session['first_name'].' '.$session['last_name'].' New Batch Sheet submission Entry: Error 1: '.$db->error); 
    $data = array('Error:',-1); 
} 
else{ 
    $batch_sheet_name = get_next_batch_sheet_name($db,$log,$session); 
    $insertdate = date('Y-m-d', strtotime($creation_date)); 

    $log->lwrite($session['first_name'].' '.$session['last_name'].' New Batch Sheet submission: Sheet Name: '.$batch_sheet_name); 
    $log->lwrite($session['first_name'].' '.$session['last_name'].' New Batch Sheet submission: Insert Date: '.$insertdate); 


    $sql_str->bind_param('ssssd',$batch_sheet_name, $bulk_liquid_code, 
         $daycode, 
         $insertdate, 
         $session['PersonID']); 

    if(!$sql_str){ 
     $log->lwrite($session['first_name'].' '.$session['last_name'].' New Batch Sheet submission: Error 2: '.$sql_str->error); 
     $log->lwrite($session['first_name'].' '.$session['last_name'].' New Batch Sheet submission: Error 2: '.$db->error); 
     $data = array('Error:',-2); 
    } 
    else{ 
     $sql_str->execute(); 


     if(!$sql_str){ 
      $error_str=$db->error; 
      $log->lwrite($session['first_name'].' '.$session['last_name'].' New Batch Sheet submission: Error 3: '.$error_str); 
      $data = ['Error:',-3]; 
     } 
     else{ 
      $batch_sheet_id=$sql_str->insert_id; 
      $log->lwrite($session['first_name'].' '.$session['last_name'].' New Batch Sheet submission returned: '.$batch_sheet_id); 
      $data = array('Success:',$batch_sheet_id); 
     } 

    } 

} 

return json_encode($data); 

}

EDIT1:

journaux de tentative de soumission. Note: La table a une colonne auto_increment donc insert_id devrait être différent de zéro.

[06/Sep/2017: 16: 17: 31] (submit_new_batch_sheet) NOM DE L'UTILISATEUR Nouveau lot soumission Feuille: Nom de la feuille: 1709,7

[06/Sep/2017: 16: 17: 31] (submit_new_batch_sheet) NOM dE L'UTILISATEUR Nouveau lot soumission de la feuille: Insérer date: 2017-09-05

[06/Sep/2017: 16: 17: 31] (submit_new_batch_sheet) NOM dE L'UTILISATEUR Nouveau lot soumission de feuille retournée: 0

EDIT 2:

De la c ommentaires Je vois mon exécution chèque doit être:

if($sql_str->execute()){...} 

à faire le changement que je reçois maintenant une erreur indiquant l'insertion a échoué.

EDIT: 3

J'ai maintenant résolu le problème. Le problème avec la fonction php était que j'avais une condition incorrecte dans mes instructions 'if'.

if($sql_str->execute()){...} 

La ligne ci-dessus montre maintenant correctement Execute où que

if($sql_str) 

était incorrect (grâce au commentateur pour avoir signalé). La véritable erreur était liée à une restriction sur l'une des colonnes du serveur de production (n'acceptait pas les valeurs nulles). Cette colonne a été modifiée pour accepter les valeurs NULL et la fonction soumet.

+0

Les journaux d'erreurs montrent-ils quelque chose d'intéressant? – Script47

+0

$ sql_str est en fait votre objet de déclaration, il sera toujours vrai. Ce n'est pas le statut de retour que vous recherchez. – Calimero

+0

@ Script47 J'ai ajouté un exemple de mon journal. – osheadavid7

Répondre

0

Comme mentionné dans les commentaires de mon statut de retour nécessaire provient de

if($sql_str->execute()){...} 

pas

if($sql_str){...} 

ayant effectué cette modification de la fonction signale à juste titre que l'exécutons a échoué.Le journal des erreurs (de db-> error) indique qu'une colonne a reçu une valeur null qui n'autorise pas les valeurs NULL. C'est une question distincte et grâce aux commentateurs, je considère maintenant que cette question a été résolue. Le problème avec la colonne rejetant les valeurs NULL est une question distincte.