我写了一段mysqli代码,它将在数据库中插入值:
$insertsql = "
INSERT INTO Teacher
(TeacherId, TeacherForename, TeacherSurname, TeacherEmail, TeacherAlias, TeacherUsername, TeacherPassword, Active, Code)
VALUES
(?, ?, ?, ?, ?, ?, ?, ?, ?)
";
if (!$insert = $mysqli->prepare($insertsql)) {
// Handle errors with prepare operation here
}
$teacherid = ;
$insert->bind_param("sssssssss", $teacherid, $getfirstname, $getsurname,
$getemail, $getteachid, $getuser,
$password, $active, $code);
$insert->execute();
if ($insert->errno) {
// Handle query error here
}
$insert->close();
但我有一个小问题。目前,我将$teacherid
变量留空,但我希望这个变量能从数据库中找到最后一个"TeacherId",并通过插入下一个"TeacherId"来插入一个新的。
例如:
如果TeacherId:的"教师"表是这样的
TeacherId
T1
T2
T3
T4
然后,当我插入一个新的TeacherId值时,它应该插入T5
,这是因为T4是当前最高的T数,所以下一个数字应该是T5。
有人知道如何做到这一点吗。任何帮助都将不胜感激:)
感谢
将TeacherId
从varchar
更改为int
。创建表看起来有点像这样:
CREATE TABLE Teacher (
TeacherId int unsigned not null auto_increment primary key
auto_increment
将从1开始,并在每次插入时自动增加1。
如果必须准备T
,则可以始终使用CONCAT
或在php代码中执行。
您可以这样做。它是一个带格式化列的自动递增主键列。我还没有机会对此进行测试。
CREATE TABLE Teacher (
TeacherId mediumint UNSIGNED AUTO_INCREMENT PRIMARY_KEY,
TeacherIdF varchar(6) AS 'T_' + CONVERT(varchar, TeacherId),
...
CONSTRAINT Teacher_UKey01 UNIQUE (TeacherIdF)
)
如果约束不起作用,则可以创建一个触发器,该触发器将在插入行后更新列。
CREATE TABLE Teacher (
TeacherId mediumint UNSIGNED AUTO_INCREMENT PRIMARY_KEY,
TeacherIdF varchar(6) NULL
...
)
CREATE TRIGGER FormattedTeacherId
AFTER insert ON Teacher
BEGIN
UPDATE Teacher SET TeacherIdF = CONCAT('T', TeacherId)
END
我还没有测试过这个代码。
你可以试试这个:
首先获取表中的总行数,并将其递增1,然后将其放入新的id中。例如:
$selectUsers = mysql_query ("SELECT * FROM `Teacher`") or die(mysql_error());
$num_rows = mysql_num_rows($selectUsers);
$next_id = $num_rows+1;
$new_id = 'T'.$next_id ;
并在将其插入表格后: