私は以下の関数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値を受け入れるように変更され、関数は送信します。コメントで述べたように
エラーログに何か興味がありますか? – Script47
$ sql_strは実際には文オブジェクトですが、常に真です。それはあなたが探している復帰ステータスではありません。 – Calimero
@ Script47私のログから例を追加しました。 – osheadavid7