我得到了为PDO数据库驱动程序返回的不同版本字符串,我认为应该是相同的。通过在PHP中调用此版本获得该版本:

Database::getConnection()->version()

内部是这样做的:

$this->getAttribute(PDO::ATTR_SERVER_VERSION)

所以它正在获得PDO驱动程序的ATTR_SERVER_VERSION。我正在使用的驱动程序是mysql,它在Linux上。

在运行PHP 5.6的一台机器上,它返回10.2.26-MariaDB-log

在另一台运行PHP 7.2的机器上,它返回5.5.5-10.2.26-MariaDB

两者都有MariaDB 10.2.26。我不知道PHP是不是他们不同的原因。 string版本会有这样的不同之处吗?

分析解答

这实际上来自数据库。深入研究源代码,我看到ATTR_SERVER_VERSION实际上调用了ZVAL_STRING(return_value, (char *)mysql_get_server_info(H->server));。对https://www.php.net/manual/en/function.mysql-get-server-info.php的评论说它和它一样

SELECT VERSION() as mysql_version

当我尝试它时,我看到它们匹配。

 $pdo->getAttribute(PDO::ATTR_SERVER_VERSION);
// '5.7.24-0ubuntu0.18.04.1'

mysql> select version();
+-------------------------+
| version()               |
+-------------------------+
| 5.7.24-0ubuntu0.18.04.1 |
+-------------------------+

MySQL版本命令说:

Returns a string that indicates the MySQL server version. The string uses the utf8 character set. The value might have a suffix in addition to the version number. See the description of the version system variable in Section 5.1.7, “Server System Variables”.

--

服务器的版本号。该值还可能包括指示服务器构建或配置信息的postfix。 -log表示启用了一般日志,慢查询日志或二进制日志中的一个或多个。 -debug表示服务器是在启用调试支持的情况下构建的

MariaDB,分叉自MySQL,具有相同的版本变量

描述:服务器版本号。它还可能包含postfix   配置或构建信息。 -debug表示调试支持   已在服务器上启用,-log至少指示其中一个   例如,启用二进制日志,常规日志或慢速查询日志   10.0.1-MariaDB-mariadb1precise-log。从MariaDB 10.2.1开始,可以在启动时设置此变量以伪造服务器版本。

命令行:-V,--version [=名称](> = MariaDB 10.2.1),--version(<=   MariaDB 10.2.0)

范围:全球

动态:没有

类型:string