【发布时间】:2015-10-25 14:52:03
【问题描述】:
我正在 Laravel 5 中构建一个应用程序,我需要确保我的一个表能够执行 FULLTEXT 搜索。
我想检测 MySQL 版本号(确保它至少为 5.6.10 或更高版本),以便如果条件失败,我可以在给定表的迁移文件中将引擎切换到 MyISAM。
我似乎找不到任何关于如何使用 PDO 访问 MySQL 服务器信息的文档,这是 Laravel 开箱即用的。
感谢任何帮助。
【问题讨论】:
我正在 Laravel 5 中构建一个应用程序,我需要确保我的一个表能够执行 FULLTEXT 搜索。
我想检测 MySQL 版本号(确保它至少为 5.6.10 或更高版本),以便如果条件失败,我可以在给定表的迁移文件中将引擎切换到 MyISAM。
我似乎找不到任何关于如何使用 PDO 访问 MySQL 服务器信息的文档,这是 Laravel 开箱即用的。
感谢任何帮助。
【问题讨论】:
为什么不直接运行 select version(); 查询,无论您使用哪种 API,它都会为您提供完全正确的结果?
echo $pdo->query('select version()')->fetchColumn();
【讨论】:
您可以使用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?
PDO的实例上调用,即$pdo->getAttribute(...)。
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
}
【讨论】:
我在迁移文件中写了一个小方法:
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。
【讨论】: