thinkphp中where()和whereOr()有很多种用法,组合成不同的SQL语句,有些常用的可能都了解,但对于一些特殊的,比如一个字段多种条件、一个条件查询多个字段等。
//最简单的实用方法,多条件并列查询,基本形式:['字段名1'=>['SQL运算符','值'],'字段名1'=>['SQL运算符','值'],……] $where = ['name' => ['like', '%国%'], 'age' => ['>=', 18]]; Db::table('user') ->where($where) ->find(); //SQL语句 SELECT * FROM `user` WHERE `name` LIKE '%国%' AND `age` >= 18 LIMIT 1
//特殊用法(|和&),多个字段用同一个条件查询,并且用and或or连接 //or(|)的用法 $where = ['name|address' => ['like', '%国%']]; Db::table('user') ->where($where) ->find(); //SQL语句 SELECT * FROM `user` WHERE ( `name` LIKE '%国%' OR `address` LIKE '%国%' ) LIMIT 1 //and(&)的用法 $where = ['name&address' => ['like', '%国%']]; Db::table('user') ->where($where) ->find(); //SQL语句 SELECT * FROM `user` WHERE ( `name` LIKE '%国%' AND `address` LIKE '%国%' ) LIMIT 1
//复杂查询,一个字段同时满足多种查询条件 $where = ['name' => [['like', '%国%'],['like', '%天%'],'or']]; Db::table('user') ->where($where) ->find(); //SQL语句 SELECT * FROM `user` WHERE ( `name` LIKE '%国%' or `name` LIKE '%天%' ) LIMIT 1 //其中如果or不写默认为and连接,或者这里也可以写上and $where = ['name' => [['like', '%国%'],['like', '%天%'],'and']]; Db::table('user') ->where($where) ->find(); where = ['name' => [['like', '%国%'],['like', '%天%']]]; Db::table('user') ->where($where) ->find(); //以上两种方式生成的SQL语句相同 SELECT * FROM `user` WHERE ( `name` LIKE '%国%' AND `name` LIKE '%天%' ) LIMIT 1
//最简单的实用方法,多条件or查询,基本形式:['字段名1'=>['SQL运算符','值'],'字段名1'=>['SQL运算符','值'],……] $where = ['name' => ['like', '%国%'], 'age' => ['>=', 18]]; Db::table('user') ->where($where) ->find(); //SQL语句 SELECT * FROM `user` WHERE `name` LIKE '%国%' OR `age` >= 18 LIMIT 1
//复杂用法,在whereOr中使用and,并且多个and之间用or连接(TP6写法) $where = [//第一维代表多个条件 [//第二维之间用or链接 //第三维之间用and连接 ['create_time', '<=', time()], ['status', '=', '1'] ], [ ['id', '>=', 10], ['update_time', '>=', time()], ] ]; Db::table('user') ->whereOr($where) ->find(); //SQL语句 SELECT * FROM `user` WHERE (create_time <= time() and status = 1) or (update_time >= time() and id >= 10)
//模糊搜索后,按照搜索结果排序,比如:文章模糊搜索标题和内容,搜索结果优先显示标题 $where = ['title|content' => ['like', '%国%']]; Db::table('article') ->whereOr($where) ->order('titlelike "%国%" desc') ->find();
现在我有一台服务器,这里叫服务器①,服务器①的80端口因为某些原因被封了,而原来指向这台服务器的域名全都失效了,只能通过服务器①的ip:端口号的方式进行访问,这样用户体验极差,所以找办法解决了一下,于是有了下面的方案。
需要两台服务器(服务器①和服务器②,服务器①是源码所在服务器),以及域名解析权限。
首先解析一个ip:端口号的访问地址,并确保能正常访问。
然后把想要恢复正常的网站解析到服务器②上,然后此服务器打开Nginx的配置,在配置的最后一行会有这么一句:
include /www/server/panel/vhost/nginx/*.conf;
我们去打开这个目录,因为他是用*进行加载的配置,所以这里建议每个网站建立一个conf文件,文件名随意,但建议和域名同步,防止混乱后期也便于维护,要配置的内容是:
upstream shx { server 服务器①的ip:端口号 weight=1; } server { listen 80; server_name 解析的域名地址; index index.html; location / { proxy_pass http://shx/; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location ~ ^/(WEB-INF)/ { deny all; } }
配置好后就可以通过域名正常访问,看上去是域名进行访问,但实际上访问的是ip:端口号。
因为此目录下所有配置是一起加载的,所以每个upstream后面的名字都要不一样,下面proxy_pass中的也要相应替换。
这个方法还有其它作用,例如某阿域名要求必须绑定自己公司的服务器,如果你绑定其他公司的服务器,会导致网站无法正常访问,也可以用这种方法,先解析到某阿自己的服务器,再指向到自己的服务器。
前言:
本机环境windows10,python版本3.8版本。
解决方法①:
点击FIle->选择settings->点击Project 【项目名】->点击Python Interpreter,使用右侧添加一下自己Python的安装路径,添加成功后下面的列表会展示你已经安装的Python插件,点击OK,结束!
解决方法②:
这个如果不是故意去掉的话,可能问题还是出在①中了。
点击FIle->选择settings查看,如果“Power Save Mode”勾选上了,代表关闭了代码提示,点击将勾选取消,则代码提示就自动开启了。
前言:
我现在是一名python的初学者,因为有其他语言的基础,所以上来就用了全家桶中的PyCharm这款软件,我不知道是不是所有人都有这个问题,我的软件点击编辑窗口中的内容就会放大,在网上也找了一些教程来解决了一下这个问题。
修改方法:
点击FIle->选择settings->点击Keymap,使用右侧搜索栏搜索单词:Increase,会出来下面一个界面,在Increase Font Size上右键点击remove button 1 click(删除按钮1单击),点击OK,结束!
原来开发过支付宝的支付,但是时间太长,现在更新又这么快,所以又回过头重新研究了一遍支付宝沙箱环境下的支付。目前来说只能研究沙箱环境下的支付了,因为其他的都需要各种证书才能申请,个人小网站目前来说还不支持。
首先根据系统下载生成器。
打开软件后先点击:生成秘钥,然后点击:打开秘钥位置,即可获得一个公钥和一个私钥。
点击一开始沙箱环境的RSA2(SHA256)密钥中的设置,只需要将公钥内容复制到文本框中,其它默认就会自动生成公钥了。
然后去官方文档中下载PHP的demo。
下载完成后打开根目录下的config.php进行配置。其中以下三样分别填入app_id、gatewayUrl、alipay_public_key。
私钥请使用一开始软件生成的那个文件中的内容,至于两个地址return_url和notify_url中的域名必须用线上地址,不能使用本地开发,其他参数默认即可。
可以设置return_url.php和notify_url.php中的逻辑来测试一些内容,内部有详细的注释这里我就不多说了,然后运行根目录下的index.php即可。
选择支付时,因为这里是测试沙箱,所以使用官方提供的测试账号。
end
config.php一定要用支付宝公钥而不是应用公钥。
谷歌浏览器可能会有拦截,建议使用其他浏览器测试。
本地无法测试沙箱环境,必须使用线上地址。
支付宝正式网关和测试网关非常相似,一定检查仔细(本人掉到坑里了)。
使用phpinfo();查看PHP的版本:
去下面的两个网站下载对应版本的压缩包并解压(注意:必须下载 nts 版本)
https://windows.php.net/downloads/pecl/releases/igbinary/
https://windows.php.net/downloads/pecl/releases/redis/
复制两个文件中的如下四个文件到php环境中的
ext文件夹中(F:\phpstudy\PHPTutorial\php\php-7.0.12-nts\ext)
打开Apache的配置文件 php.ini,复制下面的两行代码到php.ini 文件中,并重启环境
extension=php_igbinary.dll extension=php_redis.dll
重新使用 phpinfo() 函数 查看php相关信息,出现下图才是安装成功,如果失败请查看下载的对应压缩包的版本是否正确
去下面的网站下载对应的压缩包并解压:https://github.com/MicrosoftArchive/redis/releases/
直接解压,并且cmd到解压目录下,运行文件夹中的redis-server.exe,出现下图即为安装成功:
要想在PHP中使用redis这个窗口是不能关的,否则redis将无法使用。当然如果一直开着会很麻烦,所以我们设置一下开机自启,让他在系统中一直启动着。用cmd打开解压目录,运行以下代码:
redis-server --service-install redis.windows-service.conf --loglevel verbose
设置开机自动启动,打开cmd窗口并输入:services.msc,找到redis 服务点击启动即可
如果命令失败是找不到redis服务的
1067错误:
原因1:可能是因为他需要在logs目录下生成日志文件,而执行命令时权限不够没有生成,所以只需要手动创建一个logs目录即可。
原因2:肯能是因为redis的启动窗口未关闭造成的