MySQLi Prepared语句多个执行()

Del*_*phy 1 php mysqli

    $con=mysqli_connect("localhost","eradmin","eradmin","employrank",8889);
    // Check connection
    if (mysqli_connect_errno()) {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }       

    $id = isset($_POST['id']) ? $_POST['id'] : null;
    $add = isset($_POST['add']) ? $_POST['add'] : null;

    if($id != null){
        $stmt = $con->prepare('update contestants set score = score + 1 where id = ?');
        $stmt->bind_param('i', $id);
        $stmt->execute();
    }

    if($add != null){
        $ln =  isset($_POST['ln']) ? $_POST['ln'] : null;
        $fn =  isset($_POST['fn']) ? $_POST['fn'] : null;
        $dv =  isset($_POST['div']) ? $_POST['div'] : null;
        $sr =  isset($_POST['scr']) ? $_POST['scr'] : null;
        $stmtAdd = $con->prepare('insert into contestants(ID, last_name, first_name, dept, score) values (DEFAULT,?, ?, ?, ?)');
        $stmtAdd->bind_param('ssii', $ln, $fn, $div, $scr);
        $stmtAdd->execute();
    }
Run Code Online (Sandbox Code Playgroud)

stmt执行正常.但是stmtAdd没有被执行.我放了回声,它确实在那里.不知道它可能是什么.

Fun*_*ner 5

确保ID不是AI.(只是一个见解)

但是,您使用了错误的变量$div并$scr在:

$stmtAdd->bind_param('ssii', $ln, $fn, $div, $scr);
Run Code Online (Sandbox Code Playgroud)

应该分别读作$dv和.$sr

$stmtAdd->bind_param('ssii', $ln, $fn, $dv, $sr);
Run Code Online (Sandbox Code Playgroud)

根据你现在的情况:

$dv =  isset($_POST['div']) ? $_POST['div'] : null;
Run Code Online (Sandbox Code Playgroud)

和

$sr =  isset($_POST['scr']) ? $_POST['scr'] : null;
Run Code Online (Sandbox Code Playgroud)

将错误报告添加到文件的顶部,这将有助于查找错误.

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code
Run Code Online (Sandbox Code Playgroud)

旁注:错误报告应该只在暂存中完成,而不是生产.