我正在使用代码重复保存数据。我第一次运行它并没有抱怨。第二次说<form name="testForm" ng-app="myApp" ng-controller="FormController" class="container-fluid" ng-submit="submit()">
<!-- form labels -->
<md-button class="md-raised md-primary pull-right testForm" type ="button" ng-click ="reset()">CANCEL</md-button>
<md-button class="md-raised md-primary pull-right testForm" ng-disabled="testForm.$invalid">SAVE</md-button>
</form>
。我回应$ id值,每次都不同。该表是5分钟,我想它不会被破坏。我的做法错了吗?
Duplicate entry '$id' for key 'PRIMARY'
表格结构:
function insertData($conn,$data){
$id=$data['id'];
$name=$data['name'];
$fp=$data['first_price'];
$sp=$data['second_price'];
echo "$id<br>";
echo "$name<br>";
echo "$fp<br>";
echo "$sp<br>";
$query = 'INSERT INTO names VALUES("$id", "$name", "$fp", "$fp")';
$result = $conn->query($query);
if (!$result){
echo "nothing saved, sorry $conn->error";
}
}
答案 0 :(得分:3)
您尝试将字符串文字$id
等插入表中,因为您使用的是单引号。
这是一个可行的例子:
$query = "INSERT INTO names VALUES('$id', '$name', '$fp', '$fp')";
现在一般来说,您不需要插入主键值,只需使用null,如果您的表设置为这样,它将自动递增。在你的情况下它不是(auto_increment未列在&#34;额外&#34;主键)。考虑添加它。
我假设->query()
来自PDO库,所以为了避免SQL注入,你应该使用参数绑定,你的调整后的代码将如下所示:
$query = 'INSERT INTO names VALUES(?, ?, ?, ?)';
$stmt = $conn->prepare($query);
$stmt->execute(array($id, $name, $fp, $fp));
...或者如果你使用的是mysqli而不是PDO:
$query = 'INSERT INTO names VALUES(?, ?, ?, ?)';
$stmt = $conn->prepare($query);
$stmt->bind_param('isdd', $id, $name, $fp, $fp);
$stmt->execute();
答案 1 :(得分:1)
您的查询实际上是插入字符串$id
,因为您正在使用查询字符串的单引号。这样做:
$query = "INSERT INTO names VALUES('$id', '$name', '$fp', '$fp')";
只是让你知道它背后的原因,使用单引号作为字符串会使变量被忽略。