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

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

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

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

感谢任何帮助。

【问题讨论】:

    标签: php mysql laravel pdo


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-18
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多