这有点是this post
的延续我已经采用了以下代码,并根据我的需要进行了一些调整;
function makeString() {
// Create our random string
$string = "";
$characters = array('a', 'b', 'c', 'd');
for ($i = 0; $i < 4; $i++) {
$string .= $characters[mt_rand(0, 4)];
}
$query = "SELECT COUNT(*)
FROM myTable
WHERE string = '{$string}'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
if ($row['COUNT(*)'] > 0) { // if it already exists, do it again
$string = makeString();
}
return $string;
}
我的版本:
function valCode() {
$num1 = mt_rand(1, 6);
$valcode = $num1;
include("dbdata.php");
$conn = mysql_connect($db_host, $db_uname, $db_pword) or die("Couldn't connect because ".mysql_error());
mysql_select_db($db_name);
$query = "SELECT COUNT(*) FROM records WHERE valcode='{$valcode}'";
$result = mysql_query($query) or die("Query failed because ".mysql_error());
$row = mysql_fetch_assoc($result);
if($row['COUNT(*)'] > 0) {
$valcode = valCode();
}
$query2 = "INSERT INTO records (valcode) VALUES ($valcode)";
$result2 = mysql_query($query2) or die("Query failed because ".mysql_error());
return $valcode;
}
valCode();
不是创建随机字符串(示例中为int),而是根据数据库进行检查,然后再次运行它,这会运行脚本两次,将重复值插入到我的表中。
我想也许这可能是因为使用主键允许将两个相同的值放在不同的主键下,因此将它们称为独特的,但实际上我真的不知道。
非常感谢任何帮助或评论!
答案 0 :(得分:1)
它正在执行您的代码所要做的事情。每次调用valCode()
都会执行一个INSERT
查询,因为这是函数的一部分。
代码的示例运行:
valCode()
开始寻找新代码valCode()
生成代码并发现它已存在,因此再次调用valCode()
valCode()
生成代码并发现它已存在,因此再次调用valCode()
valCode()
生成一个唯一代码INSERT
进入数据库,然后返回其调用者(函数的第二次调用)valCode
现在INSERT
代码并返回其调用者(函数的第一次调用)valCode
现在INSERT
代码并返回其调用方(代码末尾)您需要将INSERT
移到函数外部并在查询中使用其返回值。