鍍金池/ 問答/PHP/ 如果重複,如何回到上一個步驟再繼續(xù)?

如果重複,如何回到上一個步驟再繼續(xù)?

$public_prod_id = 'C'.rand(1000000000,9999999999);
    $_SESSION['public_prod_id'] = $public_prod_id;

 $exist = mysqli_num_rows($pdo->query(
      "SELECT * FROM `product`
      WHERE `public_prod_id` = '{$_SESSION['public_prod_id']}' "
    ));
if($exist == 0){
$pdo->query(
      "INSERT INTO ``
      (
        ``
      )
      VALUES
      (
        '{}'
      )
      "
    );
 }

如果找到的結(jié)果是大於0
那我如何回到上面再產(chǎn)生一組新的號碼,然後再重新走一次?

回答
編輯回答
膽怯

while continue break;

2017年6月20日 19:36
編輯回答
純妹

把這個操作封裝成一個函數(shù),如果查詢結(jié)果大于0就再調(diào)用自己一次,直到滿足你的條件再退出

2017年4月7日 15:03
編輯回答
真難過
// 1. 找到可用的id
do{
    $public_prod_id = 'C'.rand(1000000000,9999999999);
    $_SESSION['public_prod_id'] = $public_prod_id;

     $exist = mysqli_num_rows($pdo->query(
          "SELECT * FROM `product`
          WHERE `public_prod_id` = '{$_SESSION['public_prod_id']}' "
    ));
}while($exist > 0);
// 2. 插入數(shù)據(jù)
INSERT INTO ...

以上方法有一個問題,在1和2之間如果有新的重復(fù),盡管概率很低,但是插入的時候依然會報錯。
改進:

do{
    $public_prod_id = 'C'.rand(1000000000,9999999999);
    $_SESSION['public_prod_id'] = $public_prod_id;

     $exist = mysqli_num_rows($pdo->query(
          "SELECT * FROM `product`
          WHERE `public_prod_id` = '{$_SESSION['public_prod_id']}' "
    ));
    if($exist == 0){
        try{
            Insert ...
        }catch(\Exception $e){
            $exists = 1;
        }
    }
}while($exist > 0);

這樣其實還有一個問題,隨著數(shù)據(jù)量的增大,這個函數(shù)重復(fù)執(zhí)行的次數(shù)會越來越多。

  1. 使用一個id池,每次從id池中取id,用過立即去掉
  2. 調(diào)整id的生成策略
2017年5月8日 23:52