-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] isa straing 以 C 开头,后跟 '0' 到 '9' 中的任何一个,仅此而已

于 2012-11-02T13:37:51.250 回答