Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 重复ID检查,直到找到可用的ID?_Php_Loops_Mysqli - Fatal编程技术网

Php 重复ID检查,直到找到可用的ID?

Php 重复ID检查,直到找到可用的ID?,php,loops,mysqli,Php,Loops,Mysqli,这个脚本主要检查所选的随机数是否已经作为ID存在,如果没有,它将把它添加到数据库中 如果它找到一个存在的查询,它应该重复该查询,直到返回结果为0为止 以下是脚本: $venues_select = unserialize($_COOKIE['album_array']); foreach ($venues_select as $id) { $getdetails = mysqli_fetch_assoc(mysqli_query($conn, "SELECT cat_name,

这个脚本主要检查所选的随机数是否已经作为ID存在,如果没有,它将把它添加到数据库中

如果它找到一个存在的查询,它应该重复该查询,直到返回结果为0为止

以下是脚本:

$venues_select = unserialize($_COOKIE['album_array']);
        foreach ($venues_select as $id) {

$getdetails = mysqli_fetch_assoc(mysqli_query($conn, "SELECT cat_name, cat_city, cat_down_lvl FROM new_categories WHERE cat_id = '$id'"));

             $det_cat_name = $getdetails['cat_name'];
             $det_cat_city = $getdetails['cat_city'];
             $det_cat_id = $getdetails['cat_down_lvl'];

    $length = 25;
    $randomString = substr(str_shuffle("0123456789"), 0, $length);

    $sqla = "SELECT * FROM `new_albums` WHERE `album_ref` = '$randomString'";
    $resulta = $conn->query($sqla);

    if (!$resulta->num_rows > 0) {

        mysqli_query($conn, "INSERT INTO new_albums (album_id,album_name,venue_name,city_name,cat_id,album_ref,date_added) 
                 VALUES ('','$album_name','$det_cat_name','$det_cat_city','$det_cat_id','$randomString','$todays_date')");
    } else {

        //// CHECK AGAIN
    }
}
如何重复此代码直到找到可用ID?

使用while循环:

$search = true; // allow the loop to begin

while($search == true) {
    $randomString = substr(str_shuffle("0123456789"), 0, $length);
    $sqla = "SELECT * FROM `new_albums` WHERE `album_ref` = '$randomString'";
    $resulta = $conn->query($sqla);

     if (!$resulta->num_rows > 0) {

         mysqli_query($conn,"INSERT INTO new_albums (album_id,album_name,venue_name,city_name,cat_id,album_ref,date_added) 
             VALUES ('','$album_name','$det_cat_name','$det_cat_city','$det_cat_id','$randomString','$todays_date')");

        $search = false; // change the flag so the while loop will not repeat

    }
}

为了回答您的问题,而不考虑代码的效率或任何事情,您所需要做的就是将代码放入一个函数中,然后调用它自己。这被称为递归函数

所以,你可以这样做:

public function findId() {
    //Your code for checking if the ID is used
    if () {
        //Your success code
        return $id
    } else {
        return findId();
    }
}

这将继续调用函数并执行代码,直到if语句变为true。

您希望总共插入多少条记录?这个脚本位于
Foreach
中,因此它可能很多…您可以将代码与Foreach部分一起发布吗?我已经更新了我的问题,将其包括在内。这不是@fislerdata的解决方案吗回答您的问题???@Snappysites很乐意提供帮助。