使用 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 effect
和 use \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 服务器版本的主要内容,如果未能解决你的问题,请参考以下文章