使用 PDO 获取 MySQL 服务器版本

Posted

技术标签:

【中文标题】使用 PDO 获取 MySQL 服务器版本【英文标题】:Get MySQL Server Version with PDO 【发布时间】:2015-10-25 14:52:03 【问题描述】:

我正在 Laravel 5 中构建一个应用程序,我需要确保我的一个表能够执行 FULLTEXT 搜索。

我想检测 mysql 版本号(确保它至少为 5.6.10 或更高版本),以便如果条件失败,我可以在给定表的迁移文件中将引擎切换到 MyISAM。

我似乎找不到任何关于如何使用 PDO 访问 MySQL 服务器信息的文档,这是 Laravel 开箱即用的。

感谢任何帮助。

【问题讨论】:

【参考方案1】:

为什么不直接运行 select version(); 查询,无论您使用哪种 API,它都会为您提供完全正确的结果?

echo $pdo->query('select version()')->fetchColumn();

没有给我一个错误

【讨论】:

抱歉,我明白了,我不得不从 Laravel 获取我的 PDO 实例。非常感谢。【参考方案2】:

您可以使用PDO::getAttribute(PDO::ATTR_SERVER_VERSION) http://php.net/manual/en/pdo.getattribute.php

【讨论】:

use PDO 抛出这个:The use statement with non-compound name 'PDO' has no effectuse \PDO 抛出这个:Non-static method PDO::getAttribute() cannot be called statically, assuming $this from incompatible context WTF? @VinceKronlein 这是一个非静态方法,必须在PDO的实例上调用,即$pdo->getAttribute(...)【参考方案3】:

Vince Kronlein 的回答稍作改进

function version($min)
    $pdo = DB::connection()->getPdo();
    $version = $pdo->query('select version()')->fetchColumn();

    preg_match("/^[0-9\.]+/", $version, $match);

    $version = $match[0];

    return (version_compare($version, $min) >= 0);

用法:

if(version('5.7.0'))
    //do someting

【讨论】:

当达到 5.10.10 这样的版本时,这不会中断吗?你的子字符串不再起作用了? @TomSomerville 正确,感谢您注意到这一点。我用一个快速的正则表达式匹配更新了我的答案,这现在也应该适用于更长的版本。【参考方案4】:

我在迁移文件中写了一个小方法:

protected static function version() 

    $pdo     = DB::connection()->getPdo();
    $version = $pdo->query('select version()')->fetchColumn();

    (float)$version = mb_substr($version, 0, 6);

    if ($version < '5.6.10') 
        return false;
    

    return true;

很有魅力。感谢 cmets。

【讨论】:

以上是关于使用 PDO 获取 MySQL 服务器版本的主要内容,如果未能解决你的问题,请参考以下文章

使用 PDO 查询代替 mysql,即已弃用

服务器端 Ajax JQuery CRUD DataTable - PHP PDO,MySql

PDO操作MYSQL基础教程分享

php代码 potst 提交的问题?

mysql_connect():没有这样的文件或目录

PHP中MySQLMySQLi和PDO的用法和区别