MySQL中的UNION的使用 ALL | DISTINCT-去除重复数据
当查询不得不分开,而结果集又不得不放在一起时,我们可以使用MYSQL中的union方法,例如要取每个分类的前几条数据时,我们可以使用如下SQL: (selectcate_1ascate_id,discountfromproductwherestatus=1andcate_1=1orderbyiddesclimit8)union (selectcate_1ascate_id,discountfromproductwherestatus=1andcate_1=3orderbyiddesclimit8)union (selectcate_1ascate_id,discountfromproductwherestatus=1andcate_1=4orderbyiddesclimit8) 在拼接出这个SQL语句后进...[>>…]
采用php的curl方法模拟登录淘宝的实现程序
最近因为要抓取淘宝的数据,之前一直能正常抓取,某天一看数据抓取不了,调试发现问题发生在抓取的时候跳转到了淘宝登录页面,而且在抓取的程序中直接打印出结果,淘宝展示登录界面之后会迅速跳转至一个相对URL的https登录页面,此时就会进入一个无法打开的URl了。可见淘宝使用了不少的技巧来防止程序登录。 基本思路也很简单,要抓取一个淘宝产品页面,输入这个产品的ID,组装产品页面的URL.然后抓取产品页数据,如页面代码中存在登录的相关字符串,则开始进行登录。 第1步:获取登录页面https://login.taobao...[>>…]
curl抓取跳转页面时CURLOPT_FOLLOWLOCATION的使用
curl抓取页面时,如果页面会发生301,302跳转,则需要对curl进行参数设置。 curl_setopt($ch,CURLOPT_MAXREDIRS,20); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); CURLOPT_FOLLOWLOCATION即表示自动进行跳转抓取,CURLOPT_MAXREDIRS表示最多允许跳转多少次。 不过在使用时需要注意:CURLOPT_FOLLOWLOCATION需要在安全模式关闭未设置open_basedir的情况下才能使用。open_basedir是php.ini中的一项设置,功能是将用户可操作的文件限制在某目录下。 如果开户...[>>…]
mysql的严格模式Strict Mode导致Field "**" doesn't have a default value
也许严格模式是一个好东西,但如果太严格就有点过了,毕竟我们使用PHP是为了更方便快速的开发,机器能确定的东西为什么还要人工花时间精力去整理,最近我碰到一个问题就是向一个用户表中插入数据,但用户表中一个字段生日(日期型)总是会提拔示这个字段没有默认值,而我也设置过了这个字段可以为空值,用户不填也没有什么问题啊。但在StrictMode严格模式下,这是行不通的。 我是在CI框架中开发,因为在同样的环境下,在其它的项目里没有碰到类似事情,所以推断是CI的配置造...[>>…]
codeigniter页面URL带有冒号后直接不能识别路由的问题
最近在使用codeigniter开发一个网站时,发现偶尔有些列表页面会直接跳转至首页,觉得很奇怪。排查应用级的问题,未发现任何问题,就是当访问这些有问题的URI时,页面会直接访问首页,而根本不是经过目标页面跳转过去的。于是直接推断是codeigniter核心根本未识别这个URL。 比如URL:http://www.04007.cn/plist/index/185/1/2020:2940,这个URL,在codeigniter中访问,直接跳至首页,看这个URL也看不出什么问题,最特别的也就是URL中带了一个冒号,但在config中已...[>>…]
file_get_contents也可以post也可以进行超时设置
file_get_contents如果只是简单用来取过本地某个文件或者远程网页、文件的话,给人的印象就是一个只能读取固定网页、文件内容的函数,但实际它的功能远不止这么点。看手册上的介绍: stringfile_get_contents(string$filename[,bool$use_include_path[,resource$context[,int$offset[,int$maxlen]]]]) 和file()一样,只除了file_get_contents()把文件读入一个字符串。将在参数offset所指定的位置开始读取长度为maxlen的内容。如果失败,file_get_contents()将返...[>>…]
PHP与移动端APP接口的数据输入流开发实现
输入流是一个很简单的东西,当然如果没有接触和进行过相关的开发,就会有一点新鲜感。曾经在做xml-rpc以及与移动端对接开发服务器端接口时多次使用过输入流,我通过一个很简单的例子可以让大家来体会一下输入流吧: $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$URL); curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$array); $result=curl_exec($ch); 上面的例子是我们在PHP中使用curl方...[>>…]
PHP顺丰快递API接口开发-curl或fsockopen获取TOKEN
网上关于顺丰快递API的开发资料很少,特别是PHP的,而顺丰快递的SDK包只有java和c#的,截止目前也没有php的。PHPER们操作顺风快递API是不是会碰到些问题啊。 顺丰的API步骤不多说了,去顺丰官网注册申请个ID和KEY,就可以开始下面的第一步申请TOKEN的程序开发。 TOKEN授权的请求URL格式:https://open-sbox.sf-express.com/public/v1.0/security/access_token/sf_appid/99999999/sf_appkey/691EF6B3E08FB629E1BBFE1DA596986E,appid和appkey后面跟的值就是通过顺丰开发者申请后所获得的授权数据。一开始我使用C...[>>…]
serialize序列化一个round处理过的小数时会出现的一个bug
上回在开发一个项目时,我使用了serialize来序列化一段数据,然后再保存入MYSQL,因为其中有一个是经过round处理过的小数,但在存储入库后我看到mysql库里却是一个非常长的但非常接近目标值的小数,令我困惑不解,先上个示例代码。 $array=array( 'user'=>'xiaoming', 'weight'=>180.56898895 ); echoserialize($array); exit; 这样是没有问题的,会序列化成:a:2:{s:4:"user";s:8:"xiaoming";s:6:"weight";d:180.56898895;}。但如果把180.56898895换成round(180.56898895,1).即下面的代码: $array...[>>…]
ThinkPHP里Sql出错时怎么查看出错的完整sql语句
最近喜欢用ThinkPHP框架了,并且在用TH开发两个项目,在开发过程中会遇到比如下面这个model中的查询: $list=$M->where($where) ->limit($Page->firstRow.','.$Page->listRows) ->order('iddesc') ->select(); 执行时会报错(故意在order中把id和desc未留空格),报错截图如下: 但这个报错很郁闷,因为它不会把完整的SQL语句打印出来,也有朋友会说你使用:getLastSql方法把SQL语句打印出来,真觉得这样的人到底懂不懂PHP开发。PHP是顺序执行,在前面的SQL语...[>>…]