为了账号安全,请及时绑定邮箱和手机立即绑定
  • $sql="SELECT id,username,age FROM user WHERE id>=?"; $mysqli_stmt=$mysqli->prepare($sql); $id=20; $mysqli_stmt->bind_param('i',$id); if($mysqli_stmt->execute()){ //bind_result():绑定结果集中的值到变量,必须与查询结果字段一一对应 $mysqli_stmt->bind_result($id,$username,$age); //遍历结果集 //如果调用$mysqli_stmt->store_result()将数据先按照一定的格式存储,则可调用$mysqli_stmt->data_seek()来控制输出那一条记录 while($mysqli_stmt->fetch()){ echo '编号:'.$id,'<br/>'; echo '用户名:'.$username,'<br/>'; echo '年龄:'.$age.'<br/>'; echo '<hr/>'; } } $mysqli_stmt->free_result(); $mysqli_stmt->close(); $mysqli->close();
    查看全部
  • 1.注入的解释: //如果 $name=“'or 1=1#”; $pwd=md5(“123123”); $sql="select * from users where username='$name' andpassword='$pwd'"; //则以上的SQL语句会被php解析为: select * from users where username='' or 1=1#' and password=md5(‘’) 因为“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样SQL语句就变成了: select * from users where username='' or 1=1 因为1永远=1,所以where条件永远真,则结果就相当于select * from users 2.因为预定义在$mysqli_stmt=$mysqli->prepare($sql);时已经将SQL模板传递给mysql数据库并让数据库系统做语句分析,之后的传递参数将不对SQL语句做分析,所以不会出现上面所说的注入. 3.获得结果集 $mysqli_stmt->store_result(); 4.当查询语句返回的是结果集时,会因为在内存中存储结果集而占用空间,所以在之后不需要相应结果集的情况下释放结果集,回收内存空间. //释放结果集 $mysqli_stmt->free_result(); 5.关闭预处理语句 $mysqli_stmt->close();
    查看全部
  • 1.预处理工作流程 //定义SQL语句模板(用?做为占位符) $sql="INSERT user(username,password,age) VALUES(?,?,?)"; //将查询传给mysql预处理,返回一个mysqli_stmt类对象 $mysqli_stmt=$mysqli->prepare($sql); //此时mysql会解析查询,但不会执行。 $username='king'; $password=md5('king'); $age=12; //将变量绑定到查询占位符(s代表字符串,i代表整数,d代表浮点数,b代表布尔值) $mysqli_stmt->bind_param('ssi',$username,$password,$age); //执行预处理语句 if($mysqli_stmt->execute()){ echo $mysqli_stmt->insert_id; echo '<br/>'; }else{ $mysqli_stmt->error; } //之后只用修改变量值与执行即可重复使用预处理(不需要从新在此绑定参数$mysqli_stmt->bind_param()) $username='king1'; $password=md5('king1'); $age=22; $mysqli_stmt->execute(); 2.相比于直接执行SQL语句,预处理语句有三个主要优点: 1).预处理语句大大减少了分析时间,值在$mysqli_stmt=$mysqli->prepare($sql);时mysql会分析语句. 2).绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。 3).预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。
    查看全部
  • $mysqli->multi_query()多条SQL语句执行方法(下篇) 3.$mysqli->multi_query()多条SQL语句执行方法说明: 1).multi_query()逐条执行SQL语句,当其中有一条语句执行失败,后面的语句不会继续执行; 2).如果第一条语句执行成功,无论后面有几条语句执行失败,返回值都为true; 3).当第一条语句执行失败,后面的语句不会执行(与1说明情况相同),返回值为false; 4).以上只对增、删、改来说; 5).如果是查询操作,可以对执行多个查询语句,并将所有结果集存储在mysqli对象中,返回true或者false(返回true或者false的情况,参看前面的1-3); 6).使用use_result()或story_result()获得multi_query()查询后的一个结果集(结果集指针当前指向的结果集,从第一条开始); 7).more_result()检测是否还有更多的结果集,有返回真; 8).next_result()将结果集指针移动指向下一条结果集,移动成功返回真; 使用multi_query()返回值只有返回true或者false(个人已经做过实验),而所有结果集都是由$mysqli这个对象自行存储 if($mysqli->multi_query($sql)){ do{ if($mysqli_result=$mysqli->store_result()){ //赋值语句的返回的是被赋的值 $rows[]=$mysqli_result->fetch_all(MYSQLI_ASSOC); } //more_result()检测是否还有更多的结果集,next_result()将结果集指针移动指向下一条结果集 }while($mysqli->more_results() && $mysqli->next_result()); }else{ echo $mysqli->error; } print_r($rows);
    查看全部
  • $mysqli->multi_query()多条SQL语句执行方法(上篇) 1.多条SQL语句执行方法中,多条SQL语句用";"隔开($mysqli->query()和mysql_query()中SQL语句不能用”;”结束) $sql="INSERT user(username,password,age) VALUES('imooc3','imooc3',32);"; $sql.="UPDATE user SET age=5 WHERE id=28;"; $sql.="DELETE FROM user WHERE id=25;"; $res=$mysqli->multi_query($sql); 2.几乎所有的高级语言赋值语句都是有值的(包括PHP,C,C++,JAVA,javascript),返回的是被赋的值;比如: echo $a=$b=10;这个表达式的运行过程是 $b=10 返回10; $a=10(返回的值) 返回10; echo 10(返回的值)echo没有返回值.
    查看全部
  • $mysqli->set_charset('utf8'); //设置客户端字符集 $username=$_POST['username']; $username=$mysqli->escape_string($username); //mysqli->escape_string()转义字符方法:对字符串中可能让数据库引起歧义的字符进行转义(如””,’’,//等) $password=md5($_POST['password']); //使用md5()对密码进行加密 $age=$_POST['age']; $act=$_GET['act']; //根据不同的act值让同一php文件完成多种功能 switch($act){ case 'addUser': //echo '添加用户的操作'; //在php中 {变量}为了把变量和后边的字符串区分开(如:{$a}b意思是变量$a后边跟字符b) $sql="INSERT user(username,password,age) VALUES('{$username}','{$password}','{$age}')"; $res=$mysqli->query($sql); if($res){ $insert_id=$mysqli->insert_id; echo "<script type='text/javascript'> alert('添加成功,网站的第{$insert_id}位用户'); location.href='userList_6.php'; //返回用户列表界面 </script>"; exit; }else{ echo "<script type='text/javascript'> alert('添加失败,重新添加'); location.href='addUser.php'; //返回用户添加页面 </script>"; exit; } break; }
    查看全部
  • 1.PHP中那些语法有替代语法: 流程控制(包括if,while,forforeach,switch)这几个语句php中有替代语法。这些语法能发挥的地方是在PHP和HTML混合页面的代码里面。 1).使HTML和PHP混合页面代码更加干净整齐 2).流程控制逻辑更清晰,代码更容易阅读 替代语法的基本形式: 左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch; 2.通过php循环语句循环打印显示html代码: <!-- $i自增作为编号,网页显示编号与数据库中的编号不一定相等 --> <?php $i=1; foreach($rows as $row):?> <tr> <td><?php echo $i;?></td> <td><?php echo $row['username'];?></td> <td><?php echo $row['age'];?></td> <td><a href="editUser.php?id=<?php echo $row['id'];?>">更新</a>|<a href="doAction.php?act=delUser&id=<?php echo $row['id'];?>">删除</a></td> </tr> <?php $i++;endforeach;?>
    查看全部
  • mysqli中的SELECT结果返回值相关属相+方法(下篇) //取得结果集中的一条记录,作为对象返回 $row=$mysqli_result->fetch_object(); //移动结果集内部指针(结果集内通过这个指针来确定返回那一条记录) $mysqli_result->data_seek(0);//指针从0开始计数 //得到结果集中所有数据//和fetch_all();结果一样 二维索引加关联数组 while($row=$mysqli_result->fetch_assoc()){ $rows[]=$row; } //释放结果集,回收内存地址 $mysqli_result->free();
    查看全部
  • mysqli中的SELECT结果返回值相关属相+方法(上篇) $sql="SELECT id,username,age FROM user"; $mysqli_result=$mysqli->query($sql); //此时$mysqli->query()返回的是一个结果集对象,用变量$mysqli_result接收 if($mysqli_result && $mysqli_result->num_rows>0){ //echo $mysqli_result->num_rows; //显示记录数 //获取结果集中所有记录,默认返回的是二维的数组(索引+索引的形式) //$rows=$mysqli_result->fetch_all(); //不同的参数返回不同形式的数组(都是获取结果集中所有记录) $rows=$mysqli_result->fetch_all(MYSQLI_NUM); //返回索引数组 $rows=$mysqli_result->fetch_all(MYSQLI_ASSOC);//返回关联数组 $rows=$mysqli_result->fetch_all(MYSQLI_BOTH); //返回索引数组与关联数组 //每次只能取一条记录 $row=$mysqli_result->fetch_row();//取得结果集中一条记录作为索引数组返回(=mysql_fetch_row();) $row=$mysqli_result->fetch_assoc();//取得结果集中的一条记录作为关联数组返回(=mysql_fetch_assoc();) //取得结果集中的一条记录,不同的参数返回不同形式的数组(=mysql_fetch_array();) $row=$mysqli_result->fetch_array();//默认以关联数组和索引数组两种方式返回 $row=$mysqli_result->fetch_array(MYSQLI_ASSOC); //MYSQLI_ASSOC返回关联数组, MYSQLI_NUM返回索引数组, MYSQLI_BOTH返回索引数组与关联数组
    查看全部
  • SELECT/DESC/DESCRIBE/SHOW/EXPLAIN执行成功返回mysqli_result对象,执行失败返回false 对于其他SQL语句的执行,执行成功返回true,否则返回false
    查看全部
    0 采集 收起 来源:MySQLi使用解析

    2017-02-24

  • 1.$mysqli->insert_id与mysql_insert_id(): 当表中没有字段设置为AUTO_INCREMENT(自增长),则$mysqli->insert_id与mysql_insert_id()返回的值为0(个人分析见解:说明一张数据表如果没有设置AUTO_INCREMENT字段,AUTO_INCREMENT的值=0,设置了AUTO_INCREMENT字段则AUTO_INCREMENT=1,如果用吧AUTO_INCREMENT当做记录指针,AUTO_INCREMENT始终指向的都是将要填写的下一条记录) 2.affected_rows值为3种: 1).受影响的记录条数 2).-1,代表SQL语句有问题 3).0,代表没有受影响记录的条数
    查看全部
  • //添加记录 //执行单条SQL语句,只能执行一条SQL语句; // $sql="INSERT user(username,password) VALUES('king','king');"; // $sql.="DROP TABLE user;”; //直接添加两条SQL语句并用mysql->query()插入系统将报错 $sql="INSERT user(username,password) VALUES('queen1','queen1'),('queen2','queen2'),('queen3','queen3'),('queen4','queen4')"; $res=$mysqli->query($sql); if($res){ //得到上一插入操作产生的AUTO_INCREMENT的值 //$mysqli->insert_id与mysql_insert_id()功能相同,都是获取插入操作执行前的AUTO_INCREMENT值 echo '恭喜您注册成功,您是网站第'.$mysqli->insert_id.'位用户<br/>'; //得到上一步操作产生的受影响记录条数 //$mysqli->affected_rows与mysql_affected_row()功能相同,都是获取被影响的行数值 echo '有'.$mysqli->affected_rows.'记录被影响'; }else{ //得到上一步操作产生的错误号和错误信息 echo 'ERROR '.$mysqli->errno.':'.$mysqli->error; }
    查看全部
  • mysqli 事务处理
    查看全部
  • 渲染咯
    查看全部
  • 渲染咯
    查看全部

举报

0/150
提交
取消
课程须知
学习本门课程之前,建议先了解一下知识,会更有助于理解和掌握本门课程 1、掌握PHP基本的语言语法,掌握面向对象知识。 2、了解数据库相同的基础知识,能对数据进行简单的增删改查。
老师告诉你能学到什么?
1、MySQLi基于面向对象中常用的内容剖析。 2、MySQLi基于面向过程中常用的内容剖析。 3、通过MySQLi实现无刷新评论系统。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!