php mysqli insert适用于dev,但不适用于生产,在自动增量列

时间:2017-09-06 15:16:19

标签: php mysqli sql-insert production-environment execute

我有以下函数php函数,它将插入请求提交到mysql数据库。在测试/开发服务器上,它每次都可以工作,但是当通过git克隆(整个应用程序通过git)到生产机器时,它不会返回任何错误,但无法在数据库中插入一行。数据库中的所有表(开发和生产)都是使用相同的脚本创建的(由于测试等原因,存储的实际数据值可能不同)。

准备好后,绑定并执行我检查$ sql_str的状态,该值应为true或false。在每种情况下,它返回true并在开发服务器上插入一个新行。在生产服务器上,它仍然返回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 / Sep / 2017:16:17:31](submit_new_batch_sheet)用户名新批量表提交:表名:1709.7

[06 / Sep / 2017:16:17:31](submit_new_batch_sheet)用户名新批量表提交:插入日期:2017-09-05

[06 / Sep / 2017:16:17:31](submit_new_batch_sheet)用户名返回新批量表提交:0

编辑2:

从评论中我看到我的执行检查应该是:

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

进行更改后,我现在收到错误,说明插入失败。

修改:3

我现在已经解决了这个问题。 php函数的问题是我的'if'语句中的条件不正确。

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

上面的行现在正确地显示了执行的位置

if($sql_str)

不正确(感谢评论者指出这一点)。真正的错误与生产服务器上某个列的限制有关(不接受空值)。此列现已修改为接受NULL值并且函数提交。

1 个答案:

答案 0 :(得分:0)

如评论中所述,我要求的退货状态来自

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

不是

if($sql_str){...}

进行此更改后,函数会正确报告执行失败。错误日志(来自db->错误)声明列传递了一个不允许空值的空值。这是一个单独的问题,感谢评论者,我现在认为这个问题已经解决了。列拒绝NULL值的问题是另一回事。