我的数据库中有3列:电子邮件(主要),unique_code,时间戳
用户输入他们的电子邮件地址并将其添加到数据库中。 每次用户这样做时,我希望该行中的“unique_code”列自动生成一个独特的5位字母数字(0-9,A-Z)代码。我更喜欢DB做这方面的所有工作,但我不知道如何。
接下来我需要向用户显示该代码(与其行对应的代码)。
我如何解决这两个问题?
谢谢!
字段类型排序规则属性空默认额外操作
email varchar(64)utf8_unicode_ci否无
unique_code varchar(64)utf8_unicode_ci否无
更新时间戳时间戳CURRENT_TIMESTAMP否CURRENT_TIMESTAMP
指标
PRIMARY BTREE是否电子邮件7 A
编辑:(完整代码)
<?php
require "includes/connect.php";
$msg = '';
if($_POST['email']){
// Requested with AJAX:
$ajax = ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest');
try{
if(!filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL)){
throw new Exception('Invalid Email!');
}
$mysqli->query("INSERT INTO coming_soon_emails
SET email='".$mysqli->real_escape_string($_POST['email'])."'");
if($mysqli->affected_rows != 1){
throw new Exception('This email already exists in the database.');
}
if($ajax){
die('{"status":1}');
}
$msg = "Thank you!";
$mysqli->query("INSERT INTO coming_soon_emails VALUES('email', SUBSTRING(MD5(UUID()),FLOOR(RAND()*25),5), UNIX_TIMESTAMP())");
echo "Something went wrong:" . $mysqli->error;
}
catch (Exception $e){
if($ajax){
die(json_encode(array('error'=>$e->getMessage())));
}
$msg = $e->getMessage();
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>example</title>
<link rel="stylesheet" type="text/css" href="css/styles.css" />
</head>
<body>
<div id="container">
<form id="form" method="post" action="">
<input type="text" id="email" name="email" value="<?php echo $msg?>" />
<input type="submit" value="Submit" id="submitButton" />
</form>
<div id="thankyou">
Thank you! <?php echo $unique_code;?></p>
</div>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script src="js/script.js"></script>
</body>
</html>
答案 0 :(得分:0)
也许是这样的
SELECT SUBSTRING(MD5(UUID()),FLOOR(RAND()*25),5) as id;
或者,你如何使用它 -
INSERT INTO `table` VALUES('email', SUBSTRING(MD5(UUID()),FLOOR(RAND()*25),5), UNIX_TIMESTAMP())
答案 1 :(得分:0)
将code
列转换为自动递增的unique
索引:
ALTER TABLE mytable
ADD code INT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE;
然后将您的自动增量设置为从5位开始(例如10000):
ALTER TABLE tbl AUTO_INCREMENT = 10000;
你可以把它组合成一个陈述,但我不是那么好:/
然后,您可以使用LAST_INSERT_ID()获取代码列值
答案 2 :(得分:0)
在MySQL中无法做到这一点,您需要一个计算列,并且不支持它们。
你可以做的是,有一个标准的自动递增整数然后当你获取记录时将整数(基数为10)转换为某个基数的另一个整数(在你的情况下为36 - 26个字母+10个数字)会给出一个字符串。