问题: 我想从数据库中获取最大的“ SID”并添加一个。我通过我通过HTTP Post方法提交的表单来处理输入。我从数据库中获取当前的MAX“ SID”,然后将值放入HTML输入字段并添加一个。由于某种原因,它每隔一段时间就会起作用。所以我得到的输出是:
,依此类推。如果有人能指出我正确的方向,那就太好了。
PHP获得MAX(ID):
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "soccer";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
$sql = "SELECT MAX(SID) FROM spieler";
$result = mysqli_query($conn, $sql);
if(mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_assoc($result))
{
$lastID = $row["MAX(SID)"];
}
}
mysqli_close($conn);
PHP插入数据库中
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "soccer";
$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?><br><?php
$sql = "INSERT INTO spieler VALUES ('$sid', '$name', '$verein',
'$position', '$einsaetze', '$startelf', '$tore',
'$torschuesse', '$eigentore', '$vorlagen', '$elfmeter',
'$verwandelt', '$gegentore', '$gelb',
'$rot', '$fouls', '$zweikampf', '$pass', '$note')";
if(mysqli_query($conn, $sql)){
echo "Success";
}else{
echo "Failed" . mysqli_error($conn);
}
mysqli_close($conn);
HTML和PHP输入字段:
<tr>
<td><input id="SID" name="SID" readonly value="<?php echo $lastID += 1;
?>"></td>
</tr>
页面的屏幕截图:
在“ Spieler ID:”段落中放置“ SID”,以便每次页面加载时,下一个空闲ID都会自动加载到输入字段中。
答案 0 :(得分:1)
我想从数据库中获取MAX“ SID”并添加一个
不。你不知道你真的,真的不是。
您可以通过运行系统范围的锁和自主事务来做到这一点。将最后分配的值(或下一个)作为状态变量保留在表中比轮询分配的值更安全,更有效。但是,这仍然忽略了以下事实:您将尽力将规则分配给替代标识符,因此不包含任何有意义的数据。它还极大地限制了容量,并带来了意外和故意拒绝服务的重大风险。
为使错误进一步复杂化,MySQL提供了一种机制,可以使用auto-increment ids来避免所有此类麻烦 。
虽然有人可能会争辩说它们不是可移植的,所以追求另一种解决方案可能是有好处的,但显然这里并不适用,因为您的代码没有来自底层DBMS的其他抽象。