-2

ここで少し状況があります。「セッション」テーブルのデータベースに以下のデータがある場合:

SessionId

C

次に、私のコードで何が起こるかというと、ユーザーが新しい文字列を生成したときに、それが既にデータベースにあるため、上記の文字列が表示されないということです。これは、上記の例ではうまく機能します。

私が抱えている問題は、複数のセッション(試験)がある場合、以下のデータベースで以下のように文字列が表示されることです。

SessionId

C1
C2
C3

上記は3回分の試験です。しかし問題は、文字列「C」が以下のコードで生成される可能性があることです。私の質問は、上記の表のように文字列の末尾に数字がある場合、データベースに残っている文字列を生成しないようにするにはどうすればよいですか? 文字列の長さは常に 1 文字です。

          function id_generator(){ 

              $id = ""; 
              $a = array( "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" , "I" , "J" , "K" , "L" , "M" , "N" , "O" , "P" , "Q" , "R" , "S" , "T" , "U" , "V" , "W" , "X" , "Y" , "Z" ); 

          for( $i = 0 ; $i < 1 ; $i++ ){ $r = rand( 0 , 25 );
           $id .= $a[ $r ]; 

       }

       return $id;

       };

       $is_there = true;

          while( $is_there ){
        $id = id_generator(); // your function to generate id;
        $result = "SELECT SessionId FROM Session WHERE SessionId LIKE ?";
        $stmt=$mysqli->prepare($result);
        $id = $id . '%';
        $stmt->bind_param("s",$id);
        $stmt->execute(); 
        // get result and assign variables (prefix with db)
        $stmt->bind_result($dbSessionId);

        $stmt->store_result();

        $stmtnum = $stmt->num_rows();

        if($stmtnum == 0) {
        $is_there = false;
    }
    }

....

</body>
<form>

 <p><strong>1: Your Assessment ID: </strong><span id="idFont"><?php echo $id; ?></span></p>

....
4

2 に答える 2

1

なぜ使用しないのlikeですか?

$result = "SELECT SessionId FROM Session WHERE SessionId LIKE ?";
$stmt=$mysqli->prepare($result);
$id = $id . '%';
$stmt->bind_param("s",$id);
于 2012-11-02T13:39:06.693 に答える
0

わかりませんが、おそらく次のようなものです

if not Exists(Select * From Session Where SessionID Like 'C[0123456789]')
begin
  insert Session(SessionID) Values(?)
end

'C[0123456789] は、C で始まり、その後に '0' から '9' のいずれかが続くひずみです。

于 2012-11-02T13:37:51.250 に答える