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) 编辑

pdo例程(预处理)

摘要: <?php//更新反馈处理:使用异常形式的处理,代替了or die,更便捷!/*** PDO操作示例,在预处理上跟mysqli相似,不过,比mysqli更便捷*/header('Content-type=text/html;charset=utf-8');try { $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'root', array(PDO::ATTR_ERRMODE => pdo::ERRMODE_EXCEPTION)); //可以直接在这 阅读全文

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

PHP构造方法

摘要: 1、默认构造方法我们实例化一个对象$obj = new A();$obj = new A(1,2,3);可以理解了分两步走,一、new,分配内存,二、A(),调用构造方法,分配内存后马上调用。这个构造方法对应的是类中方法声明的,分配完内存就调用它。public function __construct() { //todo}如果类中没有声明__construct()方法,但我们在实例化实例的时候也是$obj = new A();按理来说,应该是调用public function __construct(){}这个方法啊,但类中没声明,该怎么办?尽管放心,系统已经构建好了一个默认的构造方法,如. 阅读全文

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

继承与调用(重新绑定)

摘要: 讨论这个问题基于这么一个场景的。class A { public function foo1() { echo "AAAAA";} public function foo2() { $this->foo1();}}class B { public function foo1() { echo "BBBBB";}}$obj = new B();$obj->foo2();现在问题是,输出"AAAAAA",还是"BBBBBB"?我们不急着去猜。先理清楚这几个方法。先看父类,父类有一个foo1(),有一个foo 阅读全文

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

php数组分组

摘要: 很多时候我们需要对一个数组进行分类,例如从数据库里取出N条记录,然后要把它们分为好几类。数据库的sql语句好像没这个功能。最理想的是在这些记录数组外面再分一层数组,这个上层数组的键名就是分类名。既然不能直接从sql语句中实现效果,我们只要从处理数组下手。看下面例子: $arr = array( array('countyid' => 1, 'county' => '中国', 'province' => '湖南'), array('countyid' => 1, 'co 阅读全文

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

explode()函数

摘要: explode这个函数有一个特殊的情况,看例程:<?php$str = 'ss';var_dump(explode('e', $str));如果找不到分割符,返回什么?返回false?原字符串?还是返回只有一个元素的数组?答案是第三个:output:array (size=1) 0 => string 'ss' (length=2)老是记不住...... 阅读全文

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

apache配置虚拟主机

摘要: 本地装了apache,根目录为F:\wamp\www\在www\目录下方东西,我们可以通过在浏览器http://localhost/test.php或者http://127.0.0.1/test.php访问到。这里是最简单的,没有虚拟主机,也就是默认情况。====================================================================================现在我们可以通过用“域名”来访问我们www\目录下的任意目录好像,如果我们f:\www\wamp\test,以前我们访问则需要通过http://localhost/test现在 阅读全文

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

终止脚本运行

摘要: 终止脚本运行exit()。什么时候用到?1、header(location:..)尽管转向,但后面的代码还是会执行,这句只是构造一个http头,还没输出http报文呢!不是立马转向 所以通常在header后面加一个exit()证明:b11.php<?phpsession_start();header('Location:b12.php');$_SESSION['a'] = 100;?>b12.php<?phpsession_start();var_dump($_SEESION);?>我们会看到b12中会输出$_SESSION['a 阅读全文

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

include与file_get_contents

摘要: 先来说file_get_contents这个函数就是把一个文件里面的东西 (字符)全部return出来。可以放一个变量里面,也就是字符串变量了,也可以字符串直接echo。相当于fopen,fread,fclose的组合。比较简单。现在要注意几点:1、任何文件都适用,无论扩展名是什么,都可以把里面的内容当字符串拿出,返回。2、拿出来的字符串不会再在php中解释。尽管拿出的字符串包含php元素。这点很重要!例如:a.test_file(扩展名夸张点)$a;b.php<?php$a = 10;echo file_get_contents('./a.test_file');ech 阅读全文

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

浅谈mysql的外键作用

摘要: 今天主要是要理顺一下mysql中的外键作用。首先理清几个概念:1、在mysql中,只有innodb引擎才有外键功能,myisam没有外键功能。2、本表中的外键是另外一个表的主键3、外键、主键都是表的索引(key,或者index),这点很重要,一对一关系就是用外键的唯一索引来做的。4、如果A表有一个字段ID(主键),B表有一个映射到A表的外键A_ID字段。那么,我们称B表是从表(子表),A表是主表(父表)。区分这两种表有什么用呢?我们等下所说的一对多关系,一是主表(父表),多是从表(子表),别搞混淆。下面我们来看个图。上图student表有一个映射到class ID的外键,因而class跟stu 阅读全文

posted @ 2013-03-13 10:57 bgwan 阅读(1241) 评论(0) 推荐(0) 编辑

导航