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

时间:2016-04-25 23:49:53

标签: 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, 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,我将如何重复此代码?

2 个答案:

答案 0 :(得分:2)

使用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

    }
}

答案 1 :(得分:0)

要回答您的问题,而不是查看代码或其他任何内容的效率,那么您需要做的就是将代码放入一个函数中,然后调用自身。这被称为递归函数。

所以,你会这样做:

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

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