我希望有人可以帮助我。我在这里发现了一个帖子,允许用户在文本框中输入单词,并用逗号分隔,它将每个单词分别添加到MySQL数据库中。我试图编辑它以匹配我的表,但它没有运作。
这是PHP / HTML:
<?php
//Connect safely to your database
try {
$db = new PDO("mysql:host=localhost;dbname=DBNAME", 'USER', 'PASSWORD');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
} catch (PDOException $e) {
die('Cannot connect to mySQL server. Details:'.$e->getMessage());
}
$i=1;
if ($_SERVER['REQUEST_METHOD']=='POST' && !empty($_POST['words'])) {
$sql = "INSERT INTO rank (id, rank, position) VALUES ('$i', ':word', '$i')";
$stmt = $db->prepare($sql);
$stmt->bindParam(':word', $word);
foreach (explode(',', $_POST['words']) as $word) {
$word = trim($word);
if (empty($word)) {
continue;
}
$stmt->execute();
$i++;
}
}
//Your form
?>
<h1>Words</h1>
<form method="POST" action="">
<input type="text" name="words"/>
<input type="submit" name="submit" value="Submit"/>
</form>
秩表的id是自动增量int(10),rank是varchar(50),而position是int(10)。 id和position应该增加每个等级1,等级2,等级3,依此类推。等级1将是[1,等级1,1],等级2将是[2,等级2,2]等......
我一直在:
[19-Aug-2016 10:49:14 America/Chicago] PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1' for key 'PRIMARY'' in /home/wiredtutorial/public_html/ranks.php:26
Stack trace:
#0 /home/wiredtutorial/public_html/ranks.php(26): PDOStatement->execute()
#1 {main}
thrown in /home/wiredtutorial/public_html/ranks.php on line 26
答案 0 :(得分:0)
您的错误发生是因为您尝试输入已存在的id
。您在查询中放置的$i
不是:word
之类的绑定参数。它是一个硬编码的值。因此,使用$i++
在循环内增加它对下一个查询没有影响。
如果您的id
字段设置为自动递增,请不要在查询中提供该字段。数据库将为您设置它。
至于位置,它应该被绑定到一个变化的参数,因为:word
是。
$sql = "INSERT INTO rank (rank, position) VALUES (:word, :pos)"
$stmt = $db->prepare($sql);
$stmt->bindParam(':word', $word);
$stmt->bindParam(':pos', $pos);
$pos = 0;
foreach (explode(',', $_POST['words']) as $w){
$word = trim($w);
if(empty($word)) continue;
$pos++;
$stmt->execute();
}