【问题标题】:Data is now not being inserted into database数据现在没有被插入数据库
【发布时间】:2012-09-20 14:39:35
【问题描述】:

我在下面有一个 mysqli/php 代码,假设将数据插入到“会话”表中。现在它用于插入数据之前没有问题,我没有更改以下代码:

if($_SERVER['REQUEST_METHOD'] == 'POST')        
{        
    $time = str_replace(array(' Hrs ', ' Mins ', ' Secs'), 
               array(':', ':', ''), $_SESSION['durationChosen']);        
    for ($i = 1, $n = $_SESSION['sessionNum']; $i <= $n; ++$i) 
    {               
            $insertsql = "
      INSERT INTO Session
        (SessionId, SessionTime, 
         SessionDate, SessionWeight, 
         SessionDuration, TotalMarks, 
         ModuleId, TeacherId, Room)
      VALUES
        (?, ?, ?, ?, ?, ?, ?, ?, ?)
    ";
    if (!$insert = $mysqli->prepare($insertsql)) {
      // Handle errors with prepare operation here
    }        
        $sessid = $_SESSION['id'] . ($n == 1 ? '' : $i);
        $sessdate = date("Y-m-d", strtotime($_SESSION['dateChosen']));

        $insert->bind_param("sssssssss", $sessid, 
          $_SESSION['timeChosen'], $sessdate,
          $_SESSION['textWeight'], $time, $_SESSION['textMarks'],
          $_SESSION['module'], $teacherid, $_SESSION['rooms']);

        $insert->execute();

        if ($insert->errno) {
          // Handle query error here
        }        
        $insert->close();        
    } 
}

就像我说的,这段代码之前有效,此后我没有更改代码中的任何内容。但我不记得是不是因为我更改了数据库(phpmyadmin)中的表,它没有将数据插入数据库。

任何人都可以检查之前的表创建并说明您是否发现任何问题?问题可能出在其他包含 SessionId 作为外键的表上吗?

下面是使用 SHOW CREATE TABLE Session 创建表:

CREATE TABLE `Session` (
 `SessionId` varchar(10) NOT NULL,
 `SessionTime` time NOT NULL,
 `SessionDate` date NOT NULL,
 `SessionWeight` int(3) NOT NULL,
 `SessionDuration` time NOT NULL,
 `TotalMarks` int(5) NOT NULL,
 `FileId` varchar(10) DEFAULT NULL,
 `ModuleId` varchar(10) NOT NULL,
 `TeacherId` int(4) NOT NULL,
 `Room` varchar(10) NOT NULL,
 PRIMARY KEY (`SessionId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

【问题讨论】:

  • @rs 我从表列中删除了 FileId,因此表中有 9 列,php 中有 9 列,但仍然没有从 mysqli/php 插入数据
  • 您看到任何错误吗?你能在网页上打印你的sql并尝试手动运行并测试。
  • 所有数据类型都匹配吗?您是否为所有非空字段传递了一个值?插入的主键对表来说是唯一的吗?您是否使用/在正确的数据库中?您的插入语句中的列数是否与您尝试插入的字段数相匹配?这可能是数据库的特权/权限问题吗?
  • 当有多个整数时,为什么要将所有变量绑定为字符串?

标签: php sql database mysqli


【解决方案1】:

根据您提供给我们的信息,我们必须做出以下假设:

  • 您的逻辑流程是正确的,我们正在 if 和 for 循环中进行处理
  • $_SESSION 变量包含您声明的所有键

在这些假设下,变量 $teacherId 没有被设置,所以它的值为 null。在您的表创建语句中,TeacherID 列不接受空值,因此插入失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多