2017-09-06 14 views
0

私は以下の関数php関数を使用して、挿入リクエストをmysqlデータベースに送ります。 testing/devサーバでは毎回動作しますが、gitでアプリケーション全体をクローン作成すると、エラーは返されませんがデータベースに行が挿入されません。データベースのすべてのテーブル(開発者と本番)は同じスクリプトを使用して作成されます(実際のデータ値はテストなどによって異なる場合があります)。php mysqli insertは開発環境では動作しませんが、自動インクリメントカラムにid 0を挿入します

した後、真か偽のどちらかであるべき、私は$ sql_strの状態を確認し、準備を結合して実行します。いずれの場合もtrueを返し、devサーバに新しい行を挿入します。本番サーバーでは、それでもtrueを返しますが、行は挿入されません。自動コミットはデフォルトでオンになっています。行が挿入されていないINSERTに対してexecuteが返される場合がありますか?

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:提出の試みから

ログ。注:表はauto_increment列を持っているため、insert_idはゼロでなければなりません。

[06/9月/ 2017:16:17:31](submit_new_batch_sheet)ニックネーム新しいバッチシート提出:シート名:1709.7

[06/9月/ 2017:16:17:31](submit_new_batch_sheet )ニックネーム新しいバッチシートの提出:インサート日:2017年9月5日

[06/9月/ 2017:16:17:31](submit_new_batch_sheet)ニックネーム新しいバッチシートの提出が返さ:0

EDIT 2:

私の実行チェックは次のようになります。変更を加えると、挿入が失敗したというエラーが表示されるようになりました。

EDIT:3

私は今、問題を解決しました。 php関数の問題は、私のif文に不正な状態があったことです。

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

上記ラインが正しく

if($sql_str) 

としてここで実行示している(これを指摘するためのコメント投稿のおかげで)間違っていました。真のエラーは、運用サーバー上のいずれかの列の制限(NULL値を受け付けない)に関連していました。この列はNULL値を受け入れるように変更され、関数は送信します。コメントで述べたように

+0

エラーログに何か興味がありますか? – Script47

+0

$ sql_strは実際には文オブジェクトですが、常に真です。それはあなたが探している復帰ステータスではありません。 – Calimero

+0

@ Script47私のログから例を追加しました。 – osheadavid7

答えて

0

私の必要なリターン・ステータスは

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

ない

から来

が行われた

if($sql_str){...} 
この変更は、関数が正常に失敗し実行することを報告しています。エラー・ログ(db-> errorから)は、ある列にヌル値を許可しないNULL値が渡されたことを示しています。これは別の問題です。コメント作成者のおかげで、私はこの問題を解決したと考えています。 NULL値を拒否する列の問題は別の問題です。

関連する問題