我在使用重复键时遇到了一些麻烦。我将从我的代码开始。
// Prepare to select all liabilities
$stmt = $con->query("TRUNCATE TABLE `Students`");
$stmt = $con->prepare("SELECT student_no, legal_first_name, legal_surname, oen_number FROM csv_students");
$stmt->execute();
$stmt->bind_result($sid, $fname, $lname, $oen);
$stmt->store_result();
$updt = $con->prepare("INSERT INTO Students (Student_ID, Last_Name, First_Name, OEN) VALUES (?, ?, ?, ?) ON DUPLICATE KEY DELETE FROM `Students` WHERE OEN = ?") or die(mysql_error($con)); // Prepare to insert a new liability
$updt->bind_param("ssss", $sid, $lname, $fname, $oen, $oen) or die("Not sending var"); // Bind variables to the result of the query
while($stmt->fetch()){
$updt->execute() or die(mysqli_error($con)); // Execute the query
}
$updt->close() or die("Not closing after send"); // Close the statement
$stmt->free_result();
$stmt->close() or die("Not closing after collection");
所以我试图从第一个表中获取变量并将它们插入到第二个表中,但每个学生大约有四个条目(每个类一个)。基本上,我得到所有这些,然后试图说“在一个重复的密钥,删除具有相同的oen编号的最后一个条目。它给我错误”警告:mysql_error()期望参数1是资源,给定对象在第23行的/var/www/ride/admin_settings/csv/students/update.php中,这是我们看到ON DUPLICATE KEY代码的行。任何人都知道发生了什么事?
答案 0 :(得分:1)
你将mysql和mysqli混合在一起。
你正在使用
or die(mysql_error($con));
第7行应该是
or die(mysqli_error($con));
我也注意到你正在做
"ssss", $sid, $lname, $fname, $oen, $oen
所以你期待5个参数,但你只假设4个?如果你期望一个数字而不是一个字符串,那么你应该在那里添加一个d。