当前位置: 首页 > 知识库问答 >
问题:

php mysqli insert适用于开发人员,但不适用于生产环境,在自动增量列上插入id 0

宿建本
2023-03-14

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

在准备、绑定和执行之后,我检查$sql_str的状态,它应该是true或false。在每种情况下,它都返回true,并在开发服务器上插入新行。在正式服上,它仍然返回true,但是没有插入行。默认情况下自动提交是打开的。是否有一些情况下,执行将返回一个没有插入行的INSERT?

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);

}

编辑1:

来自提交尝试的日志。注意:表auto_increment列,所以insert_id应该是非零。

[06/Sep/2017:16:17:31](提交新批次工作表)用户名新批次工作表提交:工作表名称:1709.7

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

[2017年9月6日:16:17:31](提交新的批处理表)用户名新的批处理表提交返回:0

编辑2:

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

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

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

编辑:3

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

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

上面的一行现在正确地显示了execute where as

if($sql_str)

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

共有1个答案

刁璞
2023-03-14

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

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

if($sql_str){...}

进行此更改后,函数会正确报告执行失败。错误日志(来自数据库)-

 类似资料:
  • 问题内容: 从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我是一个长期从事C / Java开发人员的工作,试图涉足Python,并且正在寻找陈词滥调的“面向C 开发人员的Python”文章,但是空白。我已经看到了C

  • 问题内容: 我需要经验丰富的程序员的帮助。我想提高我的MVC技能。但是我找不到关于MVC的Google优秀教程。Google始终会为“初学者提供MVC”。 我了解MVC是什么并且可以实现,但是我没有足够的经验来做OOP实用的东西。 如果有人知道MVC的优秀面向对象教程,请引导我到正确的地方-我正在寻找好的链接,书籍等。 问题答案: 包含仅PHP材料的链接带有标记,以便于识别。 在全面了解OOP之前

  • 问题内容: 嗨,我只是简单地尝试在www.example.com上获取h1标签,该标签显示为“ Example Domain”。该代码适用于http://www.example.com,但不适用于https://www.exmaple.com。我该如何解决这个问题?谢谢 问题答案: PhantomJSDriver不支持(所有)DesiredCapabilities。 你会需要: 记录在这里:htt

  • 所以我使用这种方法写入文件,它在windows上运行完全正常,但在mac上运行时,它会创建文件,但它们是空的。 我知道数据是正确的,因为它打印正确。感谢您的任何帮助,这真的让我绊倒了。

  • 问题内容: Pycharm 2016.2.3,Mac OS X 10.11.1,Python 3.5(Homebrew); 我有这个文件夹结构 所以我的预期输出是 从PyCharm运行时,此方法工作正常。但是,当我从终端运行它时,我收到一个ImportError: 我已经找到了这个问题,这是关于相同的问题。但是,没有建议的解决方案对我有用,因为我确实使用的是与PyCharm相同的Python解释器

  • 两个无状态EJB及其远程接口。EJB1被注入EJB2 > EJB2还使用一些可选包(在其清单中声明) WebLogic应用服务器(10.3.3) 两个EJB被打包成两个单独的JAR文件 如果将两个JAR文件打包到一个EAR文件中并部署,则依赖注入工作。但是如果我单独部署它们,即使我首先部署了EJB1并在Weblogic(com.xxx.EJB1#com.xxx.layer1中验证了全局JNDI名称