2012-11-01 35 views
0

这里有一些小问题。如果我在我的“会话”表的数据库,如果我有以下数据:如果字符串在数据库中并且在末尾包含数字,则不希望字符串生成

SessionId 

C 

那么什么我的代码的情况是,因为它已经是它不会显示在用户生成一个新的字符串以上的字符串在数据库中。例如,这工作得很好以上

我虽然问题是,如果我有多个会话(考试),然后在数据库中它下面会显示数据库中的字符串如下:

SessionId 

C1 
C2 
C3 

的以上是3次考试。但问题是字符串“ADERF”仍然可以在下面的代码中生成。我的问题是,如果在字符串的末尾有一个数字,就像上面的表一样,那么我怎么能不生成字符串,因为它仍然在数据库中?字符串将始终为5个字符长:

+0

去掉所有结尾数字并检查所生成的字符串是否在数据库? – Wyzard

+0

会话需要五个字符有什么特别的原因吗? – SomeKittens

+0

@Wyzard如果在字符串末尾没有数字,那么它将不会生成字符串,因为它已经在db中,那很好,当数字位于数据库的最后时,它仍然会生成字符串。我是否需要更改查询以包含LIKE?那可以工作吗? – user1723760

回答

0

查询更改为:

$result = "SELECT SessionId FROM Session WHERE SessionId LIKE CONCAT(?, '%')"; 
+0

嗨,我试过这个,并用较小的字符串测试它,但它仍然会生成一个已经在db中的字符串。如果在数据库中我的SessionId是'C','C1','C2'和'C3',它不应该生成字符串'C',但它仍然会生成字符串。所以我猜这样的声明是行不通的 – user1723760

1

如果您希望为每个会话/考试分配自己的ID(而不必担心在碰撞时发生头痛),请尝试使用GUID s。有virtually no chance of collision

+0

阅读你给我的链接,从来没有使用GUID,并害怕使用它,因为哇,这是混乱。这怎么可以在我的代码中被操纵? – user1723760

+0

http://php.net/manual/en/function.com-create-guid.php。像大多数事情一样,PHP为它提供了一个函数。 – SomeKittens

相关问题