数组中php(json)的最后一条记录,然后添加1

时间:2018-10-27 18:51:57

标签: php sql arrays json

我之前曾做过这个问题,但是我有新的数据让我理解。 我需要知道如何获取用于Web服务的php中数组的最后记录吗?我需要获取它,将其添加1,然后创建一个新的寄存器(另一条记录中的数字为+1

id    turnoActual  
106       7       

获取最后一个数字,添加1,然后添加添加了数字的另一条记录(自动,在AndroidStudio中不添加新参数),然后得到结果。因此,我得到7,加1,放入SQL,然后将8作为结果变量。

id   turnoActual
106    7
107    8

圣地亚哥,请帮忙。

php中的代码是这样的,我卡住了,我不知道在哪里看到。

ultimoTurno = LastTurn nuevoTurno = newTurn

 <?PHP
    $hostname_localhost ="xxxxxxx";
    $database_localhost ="xxxxx";
    $username_localhost ="xxxxx";
    $password_localhost ="xxxxx";

    $json=array();



    $conexion = mysqli_connect($hostname_localhost,$username_localhost,$password_localhost,$database_localhost);

    $ultimoTurno="select MAX(turnoActual) from tn";



    $resultado=mysqli_query($conexion,$ultimoTurno);

    if($registro=mysqli_fetch_array($resultado)){

        $nuevoTurno=$registro['turnoActual']+1;
        $atendido=false;

        $nuevoTurno_query="INSERT INTO tn(turnoAcutal, atendido) VALUES ('{$nuevoTurno}','{$atendido}')";
        $resultado2=mysqli_query($conexion,$nuevoTurno_query);


        if($resultado2){
            $confirmacion="SELECT turnoActual FROM tn WHERE turnoActual = '{$nuevoTurno}'";
            $resultado3=mysqli_query($conexion,$confirmacion);

            if($registro=mysqli_fetch_array($resultado3)){
                $json['usuario'][]=$registro;
            }
            else{
                $result["turnoactual"]='no registra de resultado 3';
                $json['usuario'][]=$resultar;
            }

        }
        else{
            $resulta["turnoAcutal"]='No Registra de resultado 2';
            $json['usuario'][]=$resulta;
        }
        mysqli_close($conexion);
        echo json_encode($json);








        }else{
            $resulta["turnoAcutal"]='No Registra de resultado';
            $json['usuario'][]=$resulta;
            echo json_encode($json);
        }

    ?>

Explanation

2 个答案:

答案 0 :(得分:0)

您可以使用end()获得最后一个项目。

$arr = json_decode($json, true);
$last = end($arr);
$arr[] = $last+1;

示例:https://3v4l.org/eaLg2

答案 1 :(得分:0)

我刚刚在phpMyAdmin中对此进行了反复测试:

INSERT INTO tn (turnoActual) SELECT IFNULL(MAX(turnoActual) + 1, 1) FROM tn

无论表中是否有任何行,此操作都不会出错。没有行时,将应用默认值1

为了避免出现竞争状况,建议在执行此查询之前锁定表。

如果您需要从新添加的行中获取数据,请使用php的insert_id


此答案假设您对表中的列数(2)保持真实,并且id列为PRIMARY和AUTOINCREMENT。

嗯,您的编码尝试引用了atendido,但是您将无法保存false,尽管您可以保存null。如果您将该列设置为可空并且不在INSERT中引用它,则它将默认为NULL,这对您的项目来说应该是明智的。


我还想指出,mysqli_fetch_array返回一个带有索引元素和关联元素的数组。如果只想在输出中存储关联键,则使用mysqli_fetch_assoc()


这里有一些示例代码可以帮助您入门(我在本地测试了此代码是否成功;未实现表锁定):

if (!$conexion = new mysqli("localhost", "root", "", "dbname")) {  // declare and check for a falsey value
    echo "Connection Failure"; // $conexion->connect_error <-- never show actual error details to public
} elseif (!$conexion->query("INSERT INTO tn (turnoActual) SELECT IFNULL(MAX(turnoActual) + 1, 1) FROM tn
")) {  // execute and check for a falsey return value
    echo "Insert Failure - Syntax Error"; // $conexion->error  <-- never show query or actual error details to public
} elseif (!$result = $conexion->query("SELECT * FROM tn WHERE id = " . $conexion->insert_id)) {
    echo "Select Failure - Syntax Error"; // $conexion->error  <-- never show query or actual error details to public
} else {
    echo "<pre>";
        var_export($result->fetch_row());
    echo "</pre>";
}