的好处在于,防止注入的原理大致就是在执行mysqli_prepare的时候,生成一个协议(函数),bind_parms和execute相当于往里面送值函数作为参数,所以无论如何都不能改变代码的结构,也就不会有注入。我在网上看了一下这方面的资料,还真不少。很多人甚至用if语句来判断参数封装。简单地。AND有时我们需要更改数据结构。如果绑定结果集很麻烦,我会把结果转成普通的mysqli结果集。请注意:mysqli_stmt_get_result要求mysqli使用mysqlnd驱动程序。我不喜欢在PHP上使用OOP,所以给的代码是Proceduralstyle。函数查询($sql,$type,$data){$stmt=mysqli_prepare($link,$sql);//这里的链接是mysqli_connect();obtainedarray_unshift($data,$stmt,$type);//准备bind_param的参数,把stmt和type放在第一和第二个call_user_func_array("mysqli_stmt_bind_param",$data);//用这个解决multi的问题-parameterif(!mysqli_stmt_execute($stmt)){halt("MySQL查询错误:",$sql);//错误处理}$result=mysqli_stmt_get_result($stmt);//这里我返回mysqli_result,你可以用其他的mysqli_stmt_close($stmt);返回$result;}functionfetch($result){returnmysqli_fetch_array($result,MYSQLI_NUM);}functionnum_rows($result){returnmysqli_num_rows($result);}$myID=1;$myresult=query('SELECT*FROMmy_tableWHERE`id`=?','i',array(&$myID));echonum_rows($myresult);//显示结果记录数while($row=fetch($myresult)){print_r($行);}
