2016-05-24 9 views
0

私は再帰関数を実行しようとしています。これは単純なIDの作成であり、データベース内のIDをチェックしています。 idがすでに作成されている場合は、関数を実行して新しいIDを作成し、再度検査を実行する必要があります。以下はコードです。 $行[ 'ORDER_COUNT'] == 1は、機能はありません別のセッションを作成するために戻っ)session_orderを(実行されませんでした再帰関数を使用したデータベースのチェック

public function session_order(){ 
    $sr_function = new sr_function(); 
    $session_no = (rand(0,2)); 
    //i have set the order_id in the db as '1'// 

    $sql = "SELECT COUNT(order_id) as order_count 
    FROM src_order WHERE order_id = '".$session_no."'"; 

    $query = mysql_query($sql); 
    $row = mysql_fetch_array($query); 

    if ($row['order_count'] == 1){ 
     $this->session_order(); 
    } 

    return $session_no; 
} 

方法今まで、。ありがとう

+1

返す必要があります: 'return $ this-> session_order();'。しかし、私はこの種の検証はお勧めしません。問題の1つは、ごくわずかな範囲でrand()関数を使用していることです。これを使用すると、たとえば20回同じ番号を返すことがあります。これは同じユーザーからの20件のクエリを意味します –

+0

関数の内部呼び出しで作成されたsession_noは決して使用されません。関数呼び出しは別々のスコープを使用し、変数は別々です。 – arkascha

+0

ランドは実際には7桁ですが、私はちょうど関数をテストするためにそれを非常に小さく入れました –

答えて

0

成功したIDを生成するときは、コールスタックに戻して渡す必要があります。

if ($row['order_count'] == 1){ 
    $session_no = $this->session_order(); 
} 

なぜ再帰でこれをやっていますか?簡単な反復ループがより合理的に思われます。まず、現在の実装では、すべてのIDを作成するたびにDBクエリが繰り返されます。クエリの結果は毎回同じであるはずですか?あるいは、IDリストを並行して変更していますか?

関連する問題