0

データベースに値を正常に挿入する古いmysqlコードがありました。しかし、今ではmysqliの方が良いと言われているので(私のバージョンのphpが5.3未満であるため、PDOを使用できません)、mysqlの代わりにmysqliを使用するようにコードを変更しようとしました。

問題は、この変更を行ってから、データベースに値が挿入されないことです。私は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();
}


    }
4

1 に答える 1

1

この行の終了引用符が欠落しているようです。

$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ループの結果を使用しているため、paramsをバインドする前にforループを配置する必要があるようです。

于 2012-06-14T19:57:39.157 に答える