2013年3月13日

占位符(预处理)防止sql注入

摘要: 最差的是写sql拼接变量形成字符串。一注就死。在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成 SQL 指令的编译后,才套用参数执行,因此就算参数中含有具破坏性的指令,也不会被数据库所执行。 定义好sql语句和参数后就是执行了,执行的时候需要同时将sql语句和参数传入,这样用户输入的带有非法字符的字符串在数据库会当作参数处理,而不会当作sql语句和数据库自己的字符搞混,防止注入攻击。 阅读全文

posted @ 2013-03-13 13:53 bgwan 阅读(903) 评论(0) 推荐(0) 编辑

select语句中的join

摘要: join的功能就是把两表连接起来,然后用双方关联上的字段。有4种joint1: id a b 1 2 3 2 5 5 3 5 7t2: id c t1_id 1 6 2 2 7 4 3 8 1我们可以先看看两个表通过t1_id连起来会是什么样子t1.id a b t2.id c t1_id1 2 3 3 8 12 5 5 1... 阅读全文

posted @ 2013-03-13 13:51 bgwan 阅读(686) 评论(0) 推荐(0) 编辑

output_buffer函数

摘要: 首先:echo/print/include进来的html(php中任何可以显示在浏览器的东西!) => php_buffer => tcp_buffer =>browser所以,输出是先输出到php_buffer,再到tcp_buffer,最后到browser。php.ini里可以设置output_buffer(php_buffer)开启,output_buffer = 4096,如果设置为0则表示关闭php_buffer。介绍函数:1、ob_start():就算不写这个函数,php_buffer也是开启的。只不过写这个有好处:1、可以写回调。2、默认脚本执行完才把php_b 阅读全文

posted @ 2013-03-13 13:50 bgwan 阅读(354) 评论(0) 推荐(0) 编辑

继承与调用(二)

摘要: 从父类继承下来的资源,如果没有重写,那么在子类的权限是跟父类一样的。看例子:<?phpclass A { protected function foo() { echo 'sdf'; }}class B extends A {}$obj = new B();$obj->foo();虽然继承了下来,但访问是有错的,因为对于子类,foo也是protected状态。如果是重写,权限只能更松,不能更严格,也就是说,父类是protected,继承到子类重写不能是private。只能继续是protected或者更松的public。 阅读全文

posted @ 2013-03-13 13:49 bgwan 阅读(126) 评论(0) 推荐(0) 编辑

博客搬家

摘要: 感觉博客园的博客板式不太好看...定制性差了点。所以此博客将会搬到csdn... 阅读全文

posted @ 2013-03-13 11:42 bgwan 阅读(97) 评论(0) 推荐(0) 编辑

empty与isset

摘要: 用isset用的比较多是在判断$_POST/$_GET...数组有没有指定的key。就是说$_GET/$_POST['key']有没有被赋值。第一种情况:如果一个变量没被赋值,只声明,php是不鸟的,并没有像其他语言会弄一个null或者其他的随机数。那么,如果直接用,就会出现notice的错误。例如:<?php$a; //php是不鸟的echo $a; //报出notic错误,当然,你可以忽略。?>数组也是同样道理如果压根以前没赋值过,直接echo $_arr['a'];(非赋值语句),也会报出notice。这两种情况isset()和empty()都 阅读全文

posted @ 2013-03-13 11:25 bgwan 阅读(183) 评论(0) 推荐(0) 编辑

php修改关联数组

摘要: 有以下需求,遍历数组并且对数组的值做出相应改变,例如,全部设为0;如果数组全部都是索引数组就好办了,直接用for()边遍历边修改。但如果是关联数组就蛋疼,遍历索引数组就要用foreach,但是foreach是只读的,就是说,无法做出修改。现在有三种办法:1、做一个中间临时数组:temp = array()。然后就是边遍历边赋值进去。2、用回调函数array_map()示例:$arr = array_map(function($p) {return 0;}, $arr); //p代表了元素的值,一个一个来这样就可以全部设置'了。或者:array_walk($arr, functio... 阅读全文

posted @ 2013-03-13 11:23 bgwan 阅读(388) 评论(0) 推荐(0) 编辑

使用mysqli预处理示例

摘要: //修改版,加入错误信息反馈<?phpheader('Content-type:text/html;charset=utf-8');$cnn = @new mysqli('localhost', 'root', 'root', 'test'); //加了die()居然没有代码提示,蛋疼if($cnn->connect_errno) { die('连接数据库失败:' . $cnn->connect_error);}/*** select语句,转化为mysqli_result类来处理* 阅读全文

posted @ 2013-03-13 11:22 bgwan 阅读(250) 评论(0) 推荐(0) 编辑

bind_param()与call_user_func_array()

摘要: 首先介绍call_user_func_array()函数这个函数主要用来调用函数,避免了直接调用,而且可以使用参数数组,具有很大的灵活性。尤其是与bind_param配合使用,十分绝妙。用法:function foo($a,$b) { //todo}我们可以这样调用:call_uesr_func_array('foo', array($a, $b)); //有几个参数就用几个元素的数组,如果只有一个参数就用一个元素的数组,注意,一定是数组。如果是对象里面的方法:private function foo($a, $b) { //todo}声明了对象$o;我们可以这样调用call_ 阅读全文

posted @ 2013-03-13 11:21 bgwan 阅读(746) 评论(0) 推荐(0) 编辑

常用字符串处理函数(持续添加)

摘要: 1、substr():从某位置开始(默认从0开始),截取一定长度的子字符串$strNew = substr(字符串,索引[,长度]);特殊用法:索引为负数:索引为0的时候就是从第一个字符开始,所以为-1就是从最后一个字符开始(包括最后一个字符)长度为负数:长度为0,不截取长度为正,从索引位置开始,向右截取,如果长度大于字符串剩余长度,没关系,截取到最末端长度为负,从索引位置开始,向左截取。。。2、strpos()/stripos()(第二个不区分大小写):返回要搜索的字符串出现的第一次的位置(从0开始)。如果没找到,返回false$index = strpos(字符串,要搜索的字符串[,从哪开 阅读全文

posted @ 2013-03-13 11:19 bgwan 阅读(310) 评论(0) 推荐(0) 编辑

导航