闲暇时光 🌑
闲暇时光
我の闲暇时光 time flies
静谧时光,执笔抒心,岁月痕迹甚好。
109
21
58



thinkphp中有关where()和whereOr()的各种用法

2022-06-07 10:52:08 - 2025-07-14 00:06:04
無慕 - 4.09K - 52秒 - 2.70K

thinkphp中where()和whereOr()有很多种用法,组合成不同的SQL语句,有些常用的可能都了解,但对于一些特殊的,比如一个字段多种条件、一个条件查询多个字段等。

where()部分

//最简单的实用方法,多条件并列查询,基本形式:['字段名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

whereOr()部分

//最简单的实用方法,多条件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();

编程 - 后端
ThinkPHP PHP 教程

当一个服务器80端口被封,域名无法访问服务时怎么办?

2021-08-06 16:32:17 - 2025-07-14 00:06:04
無慕 - 2.43K - 6秒 - 1.93K

产生原因描述

现在我有一台服务器,这里叫服务器①,服务器①的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中的也要相应替换。

补充

这个方法还有其它作用,例如某阿域名要求必须绑定自己公司的服务器,如果你绑定其他公司的服务器,会导致网站无法正常访问,也可以用这种方法,先解析到某阿自己的服务器,再指向到自己的服务器。

编程 - 服务器
服务器 Nginx 教程

解决PyCharm代码不提示的问题

2021-07-01 11:31:46 - 2025-07-14 00:06:04
無慕 - 255 - 6秒 - 1.66K

前言:

本机环境windows10,python版本3.8版本。

解决方法①:

点击FIle->选择settings->点击Project 【项目名】->点击Python Interpreter,使用右侧添加一下自己Python的安装路径,添加成功后下面的列表会展示你已经安装的Python插件,点击OK,结束!

微信图片_20210630145540.png

解决方法②:

这个如果不是故意去掉的话,可能问题还是出在①中了。

点击FIle->选择settings查看,如果“Power Save Mode”勾选上了,代表关闭了代码提示,点击将勾选取消,则代码提示就自动开启了。

编程 - 编程软件
PyCharm 教程

解决PyCharm点击放大的问题

2021-06-30 14:56:07 - 2025-07-14 00:06:04
無慕 - 235 - 5秒 - 1.80K

前言:

我现在是一名python的初学者,因为有其他语言的基础,所以上来就用了全家桶中的PyCharm这款软件,我不知道是不是所有人都有这个问题,我的软件点击编辑窗口中的内容就会放大,在网上也找了一些教程来解决了一下这个问题。

修改方法:

点击FIle->选择settings->点击Keymap,使用右侧搜索栏搜索单词:Increase,会出来下面一个界面,在Increase Font Size上右键点击remove button 1 click(删除按钮1单击),点击OK,结束!

微信图片_20210630145540.png

编程 - 编程软件
PyCharm 教程

PHP支付宝支付(沙箱测试)

2021-03-05 10:36:18 - 2025-07-14 00:06:04
無慕 - 725 - 6秒 - 1.83K

前言

原来开发过支付宝的支付,但是时间太长,现在更新又这么快,所以又回过头重新研究了一遍支付宝沙箱环境下的支付。目前来说只能研究沙箱环境下的支付了,因为其他的都需要各种证书才能申请,个人小网站目前来说还不支持。

开发步骤

  1. 去支付宝开放平台注册申请账号:支付宝开放平台,因为我的博客是网页,所以我去‘网页&移动应用’申请了一个应用。

    QQ截图20210305104426.png

  2. 去研发环境->沙箱环境设置好RSA2(SHA256)密钥,密钥生成方式官方提供了详细文档,下面我也会详细说明一下。

  3. 首先根据系统下载生成器。

    QQ截图20210305105356.png

  4. 打开软件后先点击:生成秘钥,然后点击:打开秘钥位置,即可获得一个公钥和一个私钥。

    微信图片_20210305105528.pngQQ截图20210305105648.png

  5. 点击一开始沙箱环境的RSA2(SHA256)密钥中的设置,只需要将公钥内容复制到文本框中,其它默认就会自动生成公钥了。QQ截图20210305110157.png

  6. 然后去官方文档中下载PHP的demo。QQ截图20210305110343.png

  7. 下载完成后打开根目录下的config.php进行配置。其中以下三样分别填入app_id、gatewayUrl、alipay_public_key。

    1614913569791290.png

  8. 私钥请使用一开始软件生成的那个文件中的内容,至于两个地址return_url和notify_url中的域名必须用线上地址,不能使用本地开发,其他参数默认即可。

  9. 可以设置return_url.php和notify_url.php中的逻辑来测试一些内容,内部有详细的注释这里我就不多说了,然后运行根目录下的index.php即可。

  10. 选择支付时,因为这里是测试沙箱,所以使用官方提供的测试账号。

    微信图片_20210305111521.png

  11. end

注意事项

  • config.php一定要用支付宝公钥而不是应用公钥。

  • 谷歌浏览器可能会有拦截,建议使用其他浏览器测试。

  • 本地无法测试沙箱环境,必须使用线上地址。

  • 支付宝正式网关和测试网关非常相似,一定检查仔细(本人掉到坑里了)。

编程 - 后端
支付 实用 教程

Redis安装(PHPredis服务+windows的redis环境)

2019-07-17 08:37:28 - 2025-07-14 00:06:03
無慕 - 953 - 28秒 - 1.73K

为PHP安装Redis服务

  1. 使用phpinfo();查看PHP的版本:

  2. 去下面的两个网站下载对应版本的压缩包并解压(注意:必须下载 nts 版本)
    https://windows.php.net/downloads/pecl/releases/igbinary/
    https://windows.php.net/downloads/pecl/releases/redis/

  3. 复制两个文件中的如下四个文件到php环境中的
    ext文件夹中(F:\phpstudy\PHPTutorial\php\php-7.0.12-nts\ext)

  4. 打开Apache的配置文件 php.ini,复制下面的两行代码到php.ini 文件中,并重启环境

  5. extension=php_igbinary.dll
    extension=php_redis.dll
  6. 重新使用 phpinfo() 函数 查看php相关信息,出现下图才是安装成功,如果失败请查看下载的对应压缩包的版本是否正确

给windows安装redis环境(win10)

  1. 去下面的网站下载对应的压缩包并解压:https://github.com/MicrosoftArchive/redis/releases/

    image.png

  2. 直接解压,并且cmd到解压目录下,运行文件夹中的redis-server.exe,出现下图即为安装成功:


  3. 要想在PHP中使用redis这个窗口是不能关的,否则redis将无法使用。当然如果一直开着会很麻烦,所以我们设置一下开机自启,让他在系统中一直启动着。用cmd打开解压目录,运行以下代码:

  4. redis-server --service-install redis.windows-service.conf --loglevel verbose
  5. 设置开机自动启动,打开cmd窗口并输入:services.msc,找到redis 服务点击启动即可

相关报错

  • 如果命令失败是找不到redis服务的

  • 1067错误:
    原因1:可能是因为他需要在logs目录下生成日志文件,而执行命令时权限不够没有生成,所以只需要手动创建一个logs目录即可。
    原因2:肯能是因为redis的启动窗口未关闭造成的


编程 - 后端
PHP Redis 数据库 教程
1
鲁ICP备2023049263号-1
© 2020 – 至今 闲暇时光
由 PHP MySQL 开发而成 | 主题 - Yun
upyun