所以我有这个简短的剧本。它没有发出任何错误,但它不会保存到数据库中。运行脚本后,我检查数据库,没有任何内容。
db只有两个项目。 (id和fid)ID设置为INT 11 auto,fid设置为VARCHAR 64.此外,我正好连接到我的数据库。
<?php
$con = mysqli_connect('####', '####', '####', '#####');
if (mysqli_connect_errno()) {
echo 'Failed to Connect to MySQL' . mysqli_connect_errno();
}
if (isset($_POST['submit'])) {
$fid = $_POST['fid'];
$query = mysqli_query($con, "SELECT * FROM fid where fid = '$fid'");
$row = mysqli_num_rows($query);
if ($row == 1) {
echo 'This Federal Tax ID is already in use.';
} else {
mysqli_query($con, "INSERT INTO `fid` (id, fid) VALUES ('', '$fid')");
}
}
?>
答案 0 :(得分:3)
根据您的评论:
它应该是一个空值,因此ID auto会每次递增。
这不是自动增量的工作原理。您的代码明确告诉记录不有值:
"INSERT INTO `fid` (id, fid) VALUES ('', '$fid')"
如果需要id
列,则预计会失败。 (它也可能因类型而失败。您正在尝试插入字符串,但自动增量列将是数字...)
不需要为自动增量列提供空值。完全省略它:
"INSERT INTO `fid` (fid) VALUES ('$fid')"
此外,此代码 对SQL注入开放 。你想要read up on that。简而言之,您应该使用绑定到用户输入值的预准备语句。不要将这些用户输入值直接连接到代码中,这样可以让用户注入自己的代码。
答案 1 :(得分:0)
如果你想使用AUTO
,你需要根本不指定值,或者指定0(如果定义为NOT NULL,则为NULL):
要么
INSERT INTO fid (fid) VALUES ('$fid')
或
INSERT INTO fid (id, fid) VALUES (0, '$fid')
或(如果id
定义为NOT NULL
)
INSERT INTO fid (id, fid) VALUES (NULL, '$fid')
消息来源:http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html