Drupal 8 db query

查询:

$database = \Drupal::database();
$result = $database->query('SELECT * FROM {xx} where ID=:id', [':id' => 1]);


# OBJ查询
$result = $database->select('players', 'p')
->fields('p')
->condition('id', 1)
->execute();

获取结果:

#1
foreach($result as $record) {
  $id = $record->id
}

#2
$records = $result->fetchAll();
$records = $result->fetchAllAssoc('id');

为什么localhost无法连接到Mysql数据库?

在做开发的时候肯定无数人都碰到过这种无法连接数据库的情况, 当你把连接的Host改成127.0.0.1以后又正常了.

先来说说两者的区别:
1. 127.0.0.1 127.0.0.1走的是TCP/IP协议。
2. localhost 使用Localhost走的是socket协议.

那就很简单. 证明问题出在Socket身上.

PHP mysql socket配置
我们可以先打印phpinfo()看看php配置里mysqli.default_socket配置

发现指向了/var/mysql/mysql.sock

Mysql Socket配置
接着再看看mysql的socket地址

发现指向了/tmp/mysql.sock

问题很明显了,是这两个Socket不对应

有三种办法解决问题:
1. 修改php.ini把配置指向 /tmp/mysql.sock(具体还是根据mysql配置来)
2. 连接数据库的时候配置Socket

Mysqli
在使用mysqi函数的时候可以看到最后一个是Socket

new mysqli('localhost', 'root', 'root', '3306', '/tmp/mysql.sock');

Drupal
Drupal 需要增加一项为Unix_socket

最后还是推荐改PHP.ini配置,一劳永逸的事