若数据库中的字符串末尾包含数字,那个么它仍然不应该在php中生成字符串

若数据库中的字符串末尾包含数字,那个么它仍然不应该在php中生成字符串,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我有一个你可以查看的应用程序。当你打开应用程序时,你会看到一个提交按钮,只需点击按钮,你就会看到它会在下面生成字符串。如果您一直点击按钮,它会在字母“A”和“B”之间生成两个字母字符串 如果在数据库中的“SessionId”列下,我有一行字符串“AB”。当我一直点击提交按钮时,它不会生成字符串“AB”。我已经测试过了,效果很好。因此,如果字符串末尾不包含数字,则这不是问题 我的问题是这个。如果我想创建多个考试。假设字符串是“AA”,并且我有3个考试,它不会在数据库中插入字符串“AA”,因为有多个

我有一个你可以查看的应用程序。当你打开应用程序时,你会看到一个提交按钮,只需点击按钮,你就会看到它会在下面生成字符串。如果您一直点击按钮,它会在字母“A”和“B”之间生成两个字母字符串

如果在数据库中的“SessionId”列下,我有一行字符串“AB”。当我一直点击提交按钮时,它不会生成字符串“AB”。我已经测试过了,效果很好。因此,如果字符串末尾不包含数字,则这不是问题

我的问题是这个。如果我想创建多个考试。假设字符串是“AA”,并且我有3个考试,它不会在数据库中插入字符串“AA”,因为有多个“AA”,所以它会在数据库中的每个“AA”后面连接一个数字,以便将其显示为“AA1”、“AA2”和“AA3”

但问题是,如果它这样做了,那么当您再次使用该应用程序并持续单击“提交”按钮时,您会看到它仍然会生成字符串“AA”,而不应该这样做,因为字符串“AA”在数据库中被用作“AA1”、“AA2”和“AA3”。目前数据库中有这三个值,但它仍然在应用程序中生成字符串

所以我的问题是,如果字符串在数据库中,并且在其末尾连接了一个数字,那么如何阻止它在应用程序中生成该字符串

以下是应用程序的代码:

<?php

 // connect to the database
 include('connect.php');

  /* check connection */
  if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    die();
  }


function id_generator(){ 

          $id = ""; 
          $a = array( "A" , "B", "C" ); 

      for( $i = 0 ; $i < 2 ; $i++ ){ $r = rand( 0 , 1 );
       $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 CONCAT(?, '%')";

    $stmt=$mysqli->prepare($result);
    // You only need to call bind_param once
    $stmt->bind_param("1",$id);
    // execute query
    $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;
}
}

 ?>

    <h1>CREATING A NEW ASSESSMENT</h1>

        <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
        <p>
        <input id="courseSubmit" type="submit" value="Submit" name="submit" />
        </p>
        </form>

        <?php
if (isset($_POST['submit'])) {

        ?>




        <br/>

         <form action="QandATable.php" method="post" id="sessionForm">
         <p><strong>1: Your Assessment ID: </strong><span id="idFont"><?php echo $id; ?></span></p>
         <input type='hidden' name='id' value='<?php echo $id; ?>' />


        </form>



        <?php

        }
        ?>

    </body>
</html>

将此更改为:

// You only need to call bind_param once
$stmt->bind_param("s",$id);

bind_param函数的第一个参数告诉解析器它是什么类型的参数(如string、int等):

能否在SQL语句后放置一个“echo$result”并显示输出(应该是SQL语句)。我猜这会说明问题的。谢谢,是这样的,而且我是个白痴,我说选择SessionId,当它应该是SessionName时,因为我稍微更改了Session表,原来的SessionId现在被称为SessionName,而现在SessionId是自动递增的。谢谢:)因为您使用num_rows()计算返回的行数,所以实际上您选择的列并不重要。如果愿意,可以选择字母“x”,结果应该是相同的。例如,从SessionId类似CONCAT(?,“%”的会话中选择“x”
// You only need to call bind_param once
$stmt->bind_param("s",$id);