我有以下函数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值并且函数提交。
答案 0 :(得分:0)
如评论中所述,我要求的退货状态来自
if($sql_str->execute()){...}
不是
if($sql_str){...}
进行此更改后,函数会正确报告执行失败。错误日志(来自db->错误)声明列传递了一个不允许空值的空值。这是一个单独的问题,感谢评论者,我现在认为这个问题已经解决了。列拒绝NULL值的问题是另一回事。