Mysql 此准备好的语句更新查询不是';不工作。。。为什么?

Mysql 此准备好的语句更新查询不是';不工作。。。为什么?,mysql,sql,sql-update,prepared-statement,Mysql,Sql,Sql Update,Prepared Statement,其他信息: date是dbtb中列的名称 当我从Where子句中删除和MOUNT(date)=?及其相应的?变量时,此查询就会工作 我想出来了。。。我通过AJAX传递一个日期变量,该变量的格式为月份的数字表示形式(即一月=1…),并将date列作为要更新的列(格式为MySQL中的日期)(m-1-yyyy),而实际上我只需要Where子句中的date列(月的数字表示形式成功地匹配了数据库中的月(日期),并更新了其他字段,并且在更新日期(日期)时正确地设置了错误的格式(数据库中的日期只不过是月的第一

其他信息:

  • date
    db
    tb
    中列的名称
  • 当我从Where子句中删除
    和MOUNT(date)=?
    及其相应的
    变量时,此查询就会工作

  • 我想出来了。。。我通过AJAX传递一个日期变量,该变量的格式为月份的数字表示形式(即一月=1…),并将
    date
    列作为要更新的列(格式为MySQL中的日期)(m-1-yyyy),而实际上我只需要Where子句中的
    date
    列(月的数字表示形式成功地匹配了数据库中的月(
    日期
    ),并更新了其他字段,并且在更新
    日期
    日期
    )时正确地设置了错误的格式(数据库中的日期只不过是月的第一个月(m-1-yyyy))(在这里可以保持不变)


    colD
    $colD\u PHPvar
    是通过AJAX传递的日期变量,作为月份的数字表示(即一月=1…)。

    什么是“不起作用的”意思是?如果您的意思是没有行被更新,最有可能的解释是没有行有问题的月份。AJAX调用返回成功消息,数据库记录没有更新……可能是一个未提交的sql事务?
    date
    是MySQL中的一个关键字(以及许多其他RDBMS)。因此,使用列名不是一个好主意。您可以尝试在列名周围使用反勾号,这可能会解决问题。解决了…我通过AJAX传递了一个日期变量,该变量的格式为月份的数字表示形式(即一月=1…),并将
    日期
    列作为要更新的列(在MySQL中格式化为日期),实际上我只需要Where子句中的
    date
    列(月的数字表示形式成功地匹配了数据库中的月(
    date
    ),并更新了其他字段,并且在更新
    date
    时正确地格式化了error(
    date
    在数据库中只是一个月的第一天(m-1-yyyy)(在这里可以保持不变)…我感谢您的帮助…保持优雅。。。
    $query="UPDATE `db`.`tb` SET `colA` = ?, `colB` = ?, `colC` = ?, `colD` = ?, `colE` = ?, `colF` = ?, `colG` = ? WHERE `tb`.`colA` = ? AND month(date)= ?;";
    $stmt = $web_dbi->prepare($query);
    $stmt->bind_param("sssssssss", $colA_PHPvar, $colB_PHPvar, $colC_PHPvar, $colD_PHPvar, $colE_PHPvar, $colF_PHPvar, $colG_PHPvar, $colA_PHPvar, $colB_PHPvar);
    $stmt->execute();
    
    $query="UPDATE `db`.`tb` SET `colA` = ?, `colB` = ?, `colC` = ?, `colE` = ?, `colF` = ?, `colG` = ? WHERE `tb`.`colA` = ? AND month(date)= ?;";
    $stmt = $web_dbi->prepare($query);
    $stmt->bind_param("sssssssss", $colA_PHPvar, $colB_PHPvar, $colC_PHPvar, $colE_PHPvar, $colF_PHPvar, $colG_PHPvar, $colA_PHPvar, $colB_PHPvar);
    $stmt->execute();