我有一个包含3列(ID,用户名,全名)的表,我希望ID为AUTOINCREMENT。我只想在表中不存在的情况下插入表中。
这是我的代码:
$fullName = $_POST['fullname'];
$username = $_POST['username'];
$dbhost = "localhost";
$dbname = "databasename";
$dbusername = "root";
$dbpassword = "";
$link = new PDO("mysql:host=$dbhost;dbname=$dbname","$dbusername","");
$statement = $link->prepare('INSERT INTO accounts (username, fullname)
VALUES (:username, :fname)');
$statement->execute([
'fname' => $fullName,
'username' => $usernameget,
]);
答案 0 :(得分:1)
如果您的 id 已经自动增加,则无需在查询中提及。
您可以在下面的查询中简单地编写
insert into accounts (username,fullname) values( $username , $fullname )
答案 1 :(得分:0)
这里有几处要解决。
id
应该省略。$_GET
或$_POST
数据放入查询中。UNIQUE
约束。要解决此问题,您可以调整代码:
// Enable exceptions, avoiding the need for manual error checking
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
// Try and keep the order of things like this consistent through your code
$username = $_POST['username'];
$fullname = $_POST['fullname'];
// Here using a short, common name for the database handle $db
$db = new mysqli("localhost","root","","database");
// Prepare your insert first as a query with no data, only placeholders
$db->prepare("insert into accounts (username,fullname) values(?,?)");
// Bind the data to the placeholders, here two string ("s") values.
$db->bind_param('ss', $username, $fullname);
// Execute the query
$db->execute();
要添加UNIQUE
约束,请使用CREATE INDEX
:
CREATE INDEX idx_accounts_username (username);
CREATE INDEX idx_accounts_full_name (full_name);
那必须在您的MySQL Shell中运行,而不是PHP。
在放置UNIQUE
约束时,MySQL将不允许重复数据。请注意,NULL
值不计算在内,可以“复制”。在列上设置NOT NULL
,以强制它们完全唯一。
答案 2 :(得分:0)
由于您的id
是自动增量主键,因此您可以使用以下方法创建或更新它:
insert into accounts (username,fullname) values( $username , $fullname ) on duplicate key update username = '$username',fullname = '$fullname'
答案 3 :(得分:0)
您可以使用PHP中的else条件来做到这一点
$fullname = $_POST['fullname'];
$username = $_POST['username'];
$chk = mysqli_query("select * FROM `accounts` where fullname='$fullname' and username='$username'");
$rs = mysqli_fetch_array($chk);
if($rs == "")
{
$ins = mysqli_query("INSERT INTO `accounts`(fullname,username) VALUES ('$fullname','$username'))";
}
else{
echo "Duplicate entry";
}
或者您也可以通过SQL查询执行此操作。
INSERT INTO accounts(username,fullname)
SELECT * from (SELECT '$username', '$fullname') AS tmp
WHERE NOT EXISTS
(SELECT username FROM accounts WHERE username='$username')
答案 4 :(得分:0)
要获得正确答案,必须提出问题并提供尽可能多的解释。你应该至少告诉你做了什么,然后得到什么。
据我了解,要实现您的目标,必须更改表结构并插入查询。
请记住接受答案,如果答案满足您的要求,请单击“上投票”按钮,
否则请提供问题的更多信息,以便此处的成员可以给出正确的答案。
如果您了解创建表的查询,请转到此答案的底部,否则请执行以下操作:
如果您使用gui创建表,
1.单击创建新表。
2.在右窗格中,给出表名和列名,如图所示。 (不要在“全名”中留空格,而应使用“ full_name”或“ fullname”)
3.向右滚动窗口,直到看到A_I列,如图所示。
4.勾选第一行(我们已将其用作ID),将出现“添加索引”框。
只需单击此处转到(底部)即可。
您将被重定向到表列表,如图所示。
6.再次打开(单击)表。
7.单击结构。
现在假设您不想在“用户名”列中重复,请单击此列并单击“唯一”,如图所示
如果不想在两个列的值都在一起时重复,请单击两个列,然后单击“唯一”,如图所示
如果您了解create table命令:
这是上面的sql:
创建表accounts
(
id
int(11)NOT NULL AUTO_INCREMENT,
username
varchar(25)NOT NULL,
fullname
varchar(55)NOT NULL,
主键(id
),
唯一键username
(username
)
)ENGINE = MyISAM DEFAULT CHARSET = latin1
具有以上表结构的记录将自动增加,并且不会添加重复的名称。 (记住,在使用
将查询插入到
插入查询时,要处理重复的条目错误,您的查询将是:
$statement = $link->prepare('INSERT IGNORE INTO accounts (username, fullname)
VALUES (:username, :fname)');
,或者您也可以使用
ON DUPLICATE KEY)
答案 5 :(得分:0)
如果未设置为自动增量,请先设置您的主键(例如ID)
第二次使用多次插入值
INSERT IGNORE INTO accounts (username,fullname) VALUES ("p","k"),("c","s");
IGNORE关键字用于重复
如果您想用PDO来查看