Php 我的代码没有将数据插入数据库

Php 我的代码没有将数据插入数据库,php,mysql,mysqli,Php,Mysql,Mysqli,我有一个旧的mysql代码,它成功地将值插入数据库。但是,由于人们现在说mysqli更适合使用,而不能使用PDO,因为我的php版本低于5.3,所以我尝试更改代码,使其使用mysqli而不是mysql 问题是,由于进行了此更改,它现在不会向数据库中插入值。我是一个mysqli新手,如果有人能帮我修改下面的代码,以便使用mysqli将数据插入数据库,我将不胜感激。我做错了什么?错误报告中没有错误 以下是我目前对此的尝试: $username="xxx"; $password="xx

我有一个旧的mysql代码,它成功地将值插入数据库。但是,由于人们现在说mysqli更适合使用,而不能使用PDO,因为我的php版本低于5.3,所以我尝试更改代码,使其使用mysqli而不是mysql

问题是,由于进行了此更改,它现在不会向数据库中插入值。我是一个mysqli新手,如果有人能帮我修改下面的代码,以便使用mysqli将数据插入数据库,我将不胜感激。我做错了什么?错误报告中没有错误

以下是我目前对此的尝试:

    $username="xxx";
    $password="xxx";
    $database="mobile_app";

      $mysqli = new mysqli("localhost", $username, $password, $database);

      /* check connection */
      if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        die();
      }

    $sql = "SELECT TeacherId FROM Teacher WHERE (TeacherUsername = ?)";

    $stmt=$mysqli->prepare($sql);
    $stmt->bind_param("s",$_SESSION['teacherusername']);
    $stmt->execute();
    $record = $stmt->fetch();
    $teacherid = $record['TeacherId'];




    if($_SERVER['REQUEST_METHOD'] == 'POST')

    {

    $time = str_replace(array(' Hrs ', ' Mins ', ' Secs'), array(':', ':', ''), $_SESSION['durationChosen']);

    $insertsql = "INSERT INTO Session (SessionId, SessionTime, SessionDate, SessionWeight, SessionDuration, TotalMarks, ModuleId, TeacherId, Room) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
    $insert = $mysqli->prepare($insertsql);


for ($i = 1, $n = $_SESSION['sessionNum']; $i <= $n; ++$i) {
    $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();
}


    }

看起来您缺少此行的结尾引号:

$insertsql = "INSERT INTO Session (
    SessionId, SessionTime, SessionDate, SessionWeight,
    SessionDuration, TotalMarks, ModuleId, TeacherId, Room) 
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);
成功

$insertsql = "INSERT INTO Session (
    SessionId, SessionTime, SessionDate, SessionWeight,
    SessionDuration, TotalMarks, ModuleId, TeacherId, Room) 
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";

在绑定参数之前,您似乎还需要放置for循环,因为您正在绑定中使用所述for循环的结果。

您是否调用了session_start?@Musa是的,我已调用session_start以及代码顶部的所有$_SESSIONS的isset。在执行insert时,您是否遇到任何错误?将变量$insertsql打印为字符串时会看到什么?是否所有输入值都需要“引用”?输入的数据类型与您的表模式匹配吗?@GirishRao我已经完成了打印$insertsql,现在我得到了两个错误,它们是:警告:mysqli::prepare[mysqli.prepare]:在中执行新语句prepare之前,必须获取所有数据。。。在第146行出现致命错误:在。。。在第155行中,我没有发现语法错误,但它仍然没有将数据插入数据库。没有拼写错误,查询中的字段名是正确的,但仍然没有在中插入数据database@user1421767好的,看起来您的操作顺序已关闭,您正在尝试在定义$sessid和$sessdate之前绑定它们。将for循环移动到bind_param调用之前。@Greg好的,我将整个for循环移动到bind param上方,如您所述,但仍然没有将数据插入到database@Greg顺便说一句,我更新了有问题的代码,这样您就可以看到当前代码的样子了。看起来您在执行后移动了bind_参数。您需要将bind_param放在for循环和execute语句之间;