PDO插入不起作用

Sch*_*.Oz 0 php mysql pdo insert

我正试图从我的数据库中的一个表中取一条记录并将其放在另一个表中(作为数据的备份 - 需要保存7年,包括删除的数据).选择工作,删除工作,但插入不.怎么了?我该怎么办才能修复它?

码:

////////// DELETE STUDENT RECORD /////////
///// step 1 - copy all data to exStudentInfo with removal date //////

$studentID = $_REQUEST['sID'];
// pull student data from the database //
$query = "SELECT * FROM studentinfo WHERE studentID=" . $studentID;
$statement = $db->prepare($query);
$statement ->execute();
while($row = $statement->fetchObject())
    {
        $studentFirst = $row->studentFirst;
        $studentLast = $row->studentLast;
        $studentDOB = $row->studentDOB;
        $studentGrade = $row->studentGrade;
        $studentClass = $row->studentClass;
        $studentAllergy = $row->studentAllergy;
        $studentFam = $row->studentFam;
        $removeDate = date("Y-m-d");
    }
Run Code Online (Sandbox Code Playgroud)

已解决:问题在于$ query ...我使用普通撇号(')而不是正确的反引号(`) - 我忘了在绑定值中包含照片字段.

$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)";
Run Code Online (Sandbox Code Playgroud)

正确形式:

$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>";
Run Code Online (Sandbox Code Playgroud)

You*_*nse 5

它让我不断怀疑为什么每个人都渴望为每个简单的插入编写几个代码屏幕.
如果你能得到一个准备好插入执行的数组,那么获取对象有什么意义呢?

$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);
Run Code Online (Sandbox Code Playgroud)

没有双重分配和绑定!

更不用说mysql可以让你在一个查询中做到这一点

INSERT INTO exstudentinfo SELECT *, CURDATE() as removeDate FROM studentinfo
Run Code Online (Sandbox Code Playgroud)