测试WP的区块编辑器

插入代码:

<?php 
    echo "hello, world";

插入表格:

abcdefghi

插入图片:

这是什么?

2012 CSS C语言 dedecms fedora Git InnoDB JAVA javascript laravel linux MyISAM MySQL nginx PHP smtp swiftmailer symfony thinkphp wordpress wordpress模板 东湖 九月 优美文字网 写作 壁纸 存储引擎 安卓开发 小说 小说创作 彩虹天堂 指针 数学 日记 校报 樱色 正则表达式 汉口学院记者团 照片 算法 网页基础 设计模式 零宽断言 面试题 黑色九月

这又是什么?

echo "hello, world";

厉害厉害,哈哈哈,爱了爱了。

使用docker-compose提供的PHP环境进行代码调试

由于我的php72环境是跑在docker容器中的,本地没有php72的环境,以下是我通过docker-compose提供的php72来调试代码的方法。

新建docker server,注意路径映射。

设置php解析器, 在1处点击(CLI Interpreter后面的三个点)

点击+,选择”From Docker,Vagant,VM,Remote…”(第一个,这里无法截图,真是抱歉…)

「假装有图」

然后选择最后Docker compose,设置本地docker-compose的yml文件,然后选择安装有php72的环境的service,点击OK

建议按照如下指定名称,并设置连接到已有容器,而没必要每次都创建容器,这样速度上可以得到提升。

 

配置PHPunit,注意这里的本地和容器的路径映射已定要正确!顺便说一下,本地路径用~符号代替家目录是不行的,必须写完整!

PHP PDO用法

PDO含义:PHP data objects。

建立连接和基本Query

<?php
try {
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    foreach($dbh->query('SELECT * from FOO') as $row) {
        print_r($row);
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

使用事务

try {  
  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  $dbh->beginTransaction();
  $dbh->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')");
  $dbh->exec("insert into salarychange (id, amount, changedate) 
      values (23, 50000, NOW())");
  $dbh->commit();

} catch (Exception $e) {
  $dbh->rollBack();
  echo "Failed: " . $e->getMessage();
}

预处理语句insert

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();

预处理语句query

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}

mysql having和where的区别

where不能筛选通过函数计算出来的列。

统计消费过100元以上的用户:

错误1

select userid, ordernum, sum(price) from orders group by (userid) where sum(price) > 100;

错误2(设置别名也不行)

select userid, ordernum, sum(price) as spent from orders group by (userid) where spent > 100;

正确:

select userid, ordernum, sum(price) from orders group by (userid) having sum(price) > 100;

MySQL连接查询on和where的区别和顺序

原文连接:https://www.cnblogs.com/jessy/p/3525419.html

left join: 左连接,返回左表中所有的记录以及右表中连接字段相等的记录。
right join: 右连接,返回右表中所有的记录以及左表中连接字段相等的记录。
inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行。
full join: 外连接,返回两个表中的行:left join + right join。
cross join: 结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。

关键字: on

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。

在使用left jion时,on和where条件的区别如下:

1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

假设有两张表:

表1:tab1

id size
1 10
2 20
3 30

表2:tab2

size name
10 AAA
20 BBB
20 CCC

两条SQL:

1、select * form tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name='AAA'
2、select * form tab1 left join tab2 on (tab1.size = tab2.size and tab2.name='AAA')
第一条SQL的过程:

1、中间表
on条件:
tab1.size = tab2.size
tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA
2 20 20 BBB
2 20 20 CCC
3 30 (null) (null)
2、再对中间表过滤
where 条件:
tab2.name=’AAA’
tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA
第二条SQL的过程:

1、中间表
on条件:
tab1.size = tab2.size and tab2.name=’AAA’
(条件不为真也会返回左表中的记录)
tab1.id tab1.size tab2.size tab2.name
1 10 10 AAA
2 20 (null) (null)
3 30 (null) (null)

其实以上结果的关键原因就是left join,right join,full join的特殊性,不管on上的条件是否为真都会返回left或right表中的记录,full则具有left和right的特性的并集。 而inner jion没这个特殊性,则条件放在on中和where中,返回的结果集是相同的。

docker-compose搭建apache结合多个php版本同时运行的环境

apache结合php有多种方式,如果需要让apache能同时使用多个php版本,经过自己的了解,应该只能使用apache with php-fpm模式运行。

首先创建两个php的service(service中与本文无关的参数已经去除,方便理解):

// docker-compose.yml
version: '3'

services:
    php56:
      container_name: php56
      build:
        context: php56
      expose:
        - "9000"
    php72:
      container_name: php72
      build:
        context: php72
      expose:
        - "9000"
   apache2:
      container_name: apache2
      build:
        context: ./apache2
      ports:
        - "80:80"
        - "443:443"
      depends_on:
        - php56
        - php72
      networks:
        default:
          aliases:
            - "a.com"
            - "b.com"

然后创建对应php容器的文件夹以及Dokcerfile,每个php一个容器,例如:

// php72/Dockerfile
FROM jakesoft/php:7.2-centos

USER root

EXPOSE 9000

CMD ["php-fpm", "-F"]

php56/Dokcerfile与上面的文件类似

但是需要注意一点的是php-fpm如果想监听非本机环境的请求时,需要修改容器中的/etc/php-fpm.d/www.conf

listen = 0.0.0.0:9000
;listen.allowed_clients = 127.0.0.1 // 这一行前面增加";"注释掉

(所有的php容器都需要做此修改)

现在去修改apache的站点配置:

a.com 使用php5.6

<VirtualHost *:80>
    DocumentRoot "/var/www/a"
    ServerName   a.com

    <FilesMatch .*$>
        SetHandler "proxy:fcgi://php56:9000"
    </FilesMatch>
</VirtualHost>

b.com 使用php7.2

<VirtualHost *:80>
    DocumentRoot "/var/www/b"
    ServerName   b.com

    <FilesMatch .*$>
        SetHandler "proxy:fcgi://php72:9000"
    </FilesMatch>
</VirtualHost>

启动:

docker-compose up --build apache2

大功告成!