Php PDO插件不工作

Php PDO插件不工作,php,mysql,insert,pdo,Php,Mysql,Insert,Pdo,我试图从数据库中的一个表中获取一条记录,并将其放在另一个表中(作为数据的备份,需要保留7年,包括删除的数据)。选择有效,删除有效,但插入无效。 发生了什么?我能做些什么来修复它 代码: 已解决:问题在$query中。。。我使用了普通的撇号('),而不是正确的反勾号(`)——而且我忘记了在绑定值中包含photo字段 $query = "INSERT INTO 'sundayschool'.'exstudentinfo' ('studentID' ,'studentFirst' ,'studentL

我试图从数据库中的一个表中获取一条记录,并将其放在另一个表中(作为数据的备份,需要保留7年,包括删除的数据)。选择有效,删除有效,但插入无效。 发生了什么?我能做些什么来修复它

代码:

已解决:问题在$query中。。。我使用了普通的撇号('),而不是正确的反勾号(`)——而且我忘记了在绑定值中包含photo字段

$query = "INSERT INTO 'sundayschool'.'exstudentinfo' ('studentID' ,'studentFirst' ,'studentLast' ,'famID' ,'studentDOB' ,'studentGrade' ,'studentClass' ,'studentAllergy' ,'studentPhoto' ,'removeDate') VALUES (:id, :first, :last, :fam, :dob, :grade, :class, :allergy, :date)";
正确形式:

$query = "INSERT INTO `sundayschool`.`exstudentinfo` (`studentID` ,`studentFirst` ,`studentLast` ,`famID` ,`studentDOB` ,`studentGrade` ,`studentClass` ,`studentAllergy` ,`studentPhoto` ,`removeDate`) VALUES (:id, :first, :last, :fam, :dob, :grade, :class, :allergy,:photo,:date)";
$statement = $db->prepare($query);
$statement->bindValue(':id',$studentID, PDO::PARAM_INT);
$statement->bindValue(':first',$studentFirst, PDO::PARAM_STR);
$statement->bindValue(':last',$studentLast, PDO::PARAM_STR);
$statement->bindValue(':fam',$studentFam, PDO::PARAM_INT);
$statement->bindValue(':dob',$studentDOB, PDO::PARAM_STR);
$statement->bindValue(':grade',$studentGrade, PDO::PARAM_STR);
$statement->bindValue(':class',$studentClass, PDO::PARAM_STR);
$statement->bindValue(':allergy',$studentAllergy, PDO::PARAM_STR);
$statement->bindValue(':date',$removeDate, PDO::PARAM_STR);
$statement->execute();

///// step 2 - Delete student from studentinfo table //////
$stmt = $db->prepare("DELETE FROM studentinfo WHERE studentID=:id");
$stmt->bindValue(':id', $studentID);
$stmt->execute();
echo $studentFirst . " " . $studentLast . " has been removed from the system (and backed up)";
echo "<p><a href='admin.php'>&lt;&lt; Return to administration page</a></p>";
$query=“插入'sundayschool`.'exstudentinfo`('studentID`、'studentFirst`、'studentLast`、'famID`、'studentDOB`、'studentGrade`、'studentClass`、'studentalergy`、'studentPhoto`、'removeDate`)值(:id、:first、:last、:fam、:dob、:grade、:class、:allergy、:photo、:date)”;
$statement=$db->prepare($query);
$statement->bindValue(':id',$studentID,PDO::PARAM_INT);
$statement->bindValue(':first',$studentFirst,PDO::PARAM_STR);
$statement->bindValue(':last',$studentLast,PDO::PARAM_STR);
$statement->bindValue(':fam',$studentFam,PDO::PARAM_INT);
$statement->bindValue(':dob',$studentDOB,PDO::PARAM_STR);
$statement->bindValue(':grade',$studentGrade,PDO::PARAM_STR);
$statement->bindValue(':class',$studentClass,PDO::PARAM_STR);
$statement->bindValue(':allergy',$studentalergy,PDO::PARAM_STR);
$statement->bindValue(':date',$removeDate,PDO::PARAM_STR);
$statement->execute();
/////步骤2-从studentinfo表中删除学生//////
$stmt=$db->prepare(“从studentinfo中删除,其中studentID=:id”);
$stmt->bindValue(':id',$studentID);
$stmt->execute();
echo$studentFirst。" " . $最后一个学生。“已从系统中删除(并备份)”;
回声“

”;
您确实应该添加正确的错误处理,但问题是您希望在10个字段中插入9个值,并且您的字段和表名使用引号:

$query = "INSERT INTO sundayschool.exstudentinfo
           (studentID ,studentFirst ,studentLast ,famID ,studentDOB ,studentGrade ,studentClass ,studentAllergy ,studentPhoto ,removeDate)
           // 10 fields
         VALUES
           (:id, :first, :last, :fam, :dob, :grade, :class, :allergy, :date)";
           // 9 values, photo is missing
如果需要引用例如mysql保留字,则需要在表名或字段名中使用反勾号:

$query = "INSERT INTO `sundayschool`.`exstudentinfo`
            // etc.

您缺少插入
studentPhoto
的部分,该部分位于
allergy
date
之间。您试图插入10个字段,但仅提供9个字段的信息

此外,请在此处删除引号。您不需要它们:

$query = "INSERT INTO `sundayschool`.`exstudentinfo` (studentID ,studentFirst ,studentLast ,famID ,studentDOB ,studentGrade ,studentClass ,studentAllergy ,studentPhoto ,removeDate) VALUES (:id, :first, :last, :fam, :dob, :grade, :class, :allergy, :date)";

记得要添加
学生照片

乍一看,您的行:

$query = "INSERT INTO 'sundayschool'.'exstudentinfo' ('studentID' ,'studentFirst' ,'studentLast' ,'famID' ,'studentDOB' ,'studentGrade' ,'studentClass' ,'studentAllergy' ,'studentPhoto' ,'removeDate') VALUES (:id, :first, :last, :fam, :dob, :grade, :class, :allergy, :date)";
需要更改为使用反勾号而不是单引号:

$query = "INSERT INTO `sundayschool`.`exstudentinfo` 
(
  `studentID`,
  `studentFirst`,
  `studentLast`,
  `famID`,
  `studentDOB`,
  `studentGrade`,
  `studentClass`,
  `studentAllergy`,
  `studentPhoto`,
  `removeDate`
) 

VALUES (
  :id, 
  :first, 
  :last, 
  :fam, 
  :dob, 
  :grade, 
  :class, 
  :allergy, 
  :photo, 
  :date
)";

我一直在想,为什么每个人都如此渴望为每一个简单的插入编写几屏代码。
如果您可以获得一个准备插入到execute中的数组,那么获取对象有什么意义

$row = $statement->fetch(PDO::FETCH_ASSOC));
$row['removeDate'] = date("Y-m-d");
$query = "INSERT INTO exstudentinfo (studentID ,studentFirst,studentLast,famID,studentDOB,studentGrade,studentClass,studentAllergy,studentPhoto,removeDate) VALUES (:id, :first, :last, :fam, :dob, :grade, :class, :allergy, :date)";
$statement = $db->prepare($query);
$statement->execute($row);
没有双重赋值和绑定

更不用说mysql可以让你这么做了


引用不起作用。您在哪里看到必须使用引号,并且必须是单个引号?请再次查看insert语句。请参阅右侧“连接选项”中的。然后告诉我们你有哪些错误谢谢,错过了照片,但这不是问题所在。问题是我需要回报价。至少这似乎是有效的。@Schwarz.Oz不太有效,你似乎没有使用任何保留字或数字名称。是的,我尝试过没有撇号,但没有插入(加上已经修复了字段)。回到过去,把回条放进去——它成功了。不知道为什么。我将尝试捕获错误。我将研究它(特别是INSERT..SELECT)。不过,我想知道这是否是一个MySQL特定的查询,如果是,这是否违背了PDO的目的之一?
$row = $statement->fetch(PDO::FETCH_ASSOC));
$row['removeDate'] = date("Y-m-d");
$query = "INSERT INTO exstudentinfo (studentID ,studentFirst,studentLast,famID,studentDOB,studentGrade,studentClass,studentAllergy,studentPhoto,removeDate) VALUES (:id, :first, :last, :fam, :dob, :grade, :class, :allergy, :date)";
$statement = $db->prepare($query);
$statement->execute($row);
INSERT INTO exstudentinfo SELECT *, CURDATE() as removeDate FROM studentinfo