abstract:<?php //老师,这段代码哪里有问题吗,为什么我执行几次后,ID都自动变了呢,例如我现在增加了9条记录,执行这个代码提示没有添加记录,我修改赋值后再添加,ID不是从10开始的,而是跳过去好多。 /**/ //pdo 添加操作 //主要有五个步骤 //-----------------------------------------------------------------
<?php //老师,这段代码哪里有问题吗,为什么我执行几次后,ID都自动变了呢,例如我现在增加了9条记录,执行这个代码提示没有添加记录,我修改赋值后再添加,ID不是从10开始的,而是跳过去好多。 /**/ //pdo 添加操作 //主要有五个步骤 //------------------------------------------------------------------// //1.连接数据库,创建pdo对象 //2.创建SQL语句,命名占位符声明参数(IGNORE,必须写紧跟在 INSERT 的后面) //3.验证SQL语句,创建预处理对象 //4参数绑定 //5.执行SQL语句(成功true,失败false) //1步,连接数据库 $pdo = new PDO('mysql:host=127.0.0.1;dbname=php_edu;charset=utf8','root','root'); //var_dump( $pdo);测试是否连接成功 //2步,创建sql语句 占位符以冒号开始 $sql = "INSERT IGNORE INTO `user` (`name`,`sex`,`age`,`status`,`email`,`password`,`create_time`) VALUES (:name,:sex,:age,:status,:email,:password,:create_time)"; //3步,验证sql语句,创建预处理对象 $stmt =$pdo->prepare($sql); //print_r($stmt); //4步 参数绑定 $name = '单雄信'; $sex = 0; $age = 45; $email = 'shan@123.com'; $password = md5('123456'); $status = 1; $createTime = time(); $stmt->bindParam('name',$name,PDO::PARAM_STR,20); $stmt->bindParam(':sex',$sex,PDO::PARAM_INT); $stmt->bindParam(':age',$age,PDO::PARAM_INT); $stmt->bindParam(':status',$status,PDO::PARAM_INT); $stmt->bindParam(':email',$email,PDO::PARAM_STR,100); $stmt->bindParam(':password',$password,PDO::PARAM_STR,32); $stmt->bindParam(':create_time',$createTime,PDO::PARAM_INT); //5步,执行SQL语句 if ($stmt->execute()){ //三元运算符 //echo $stmt->execute(); echo ($stmt->rowCount()>0) ? '成功添加了'.$stmt->rowCount().'条记录 ': '没有记录'; }else{ //??好像没有执行过。 exit(print_r($stmt->errorInfo(),true)); }
Correcting teacher:天蓬老师Correction time:2019-05-09 14:01:46
Teacher's summary:你可以用$stmt->debugDumpParams(), 将你要执行的SQL打印出来, 完了在数据库中先执行一下, 看是否正确, 参数是否已绑定成功