【问题标题】:How to get laravel DB connection to php connection?如何让 laravel DB 连接到 php 连接?
【发布时间】:2017-08-18 19:20:44
【问题描述】:

我需要接收到变量的 laravel DB 连接,以对数据库提出具体的纯 SQL php 需求。所需代码:

<?php 
// this is not working
$conn = DB::connection();

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>

期望的结果:“连接成功”

我需要它,因为我有非常复杂的 SQL 需求,我需要放入一个查询,而不是使用 laravel 查询语法(我相信这是更好的方法,但我有复杂的查询,需要使用纯查询文本来执行,不是 laravel "->" 语法)

我需要让 laravel 数据库连接不总是像 PDO 那样经常建立第二个 php 连接或写下数据库凭据。如果存在从 laravel 到 DBS 的 PDO 连接,那么获取到 php 对我来说也很有用。

DB::connection()->name

返回一个 DB 的名称,但那是没有连接的:/

我一直在寻找它,但没有找到解决方案,有人可以帮我找到正确的答案吗? (也许不重要,但我用的是mysql)

【问题讨论】:

  • 你可以使用\DB::statement('raw query here');
  • 但是如何从这个语句中获取一个结果(或结果集)呢?或者甚至可以按照我的要求获得这种连接?但是感谢您的贡献,我会仔细研究该语句语法..我发现了另一个好东西,但我的问题没有答案: $results = DB::select( DB::raw("SELECT * FROM some_table WHERE some_col = '$someVariable'") );
  • 您是否尝试阅读文档:laravel.com/docs/5.4/database#running-queries
  • 不知道这是否有用:DB::connection()-&gt;getPdo()
  • 您将无法以这种方式检测连接错误,因为只有连接成功时才会使用暴露 PDO 实例的外观。

标签: php mysql sql laravel laravel-5


【解决方案1】:

您可以根据需要在 laravel 中使用原始查询来执行查询。如果您仍然需要连接实例,您可以创建一个类并实现 ConnectionResolverInterface:

use Illuminate\Database\ConnectionResolverInterface as Resolver
class connection implements Resolver {

}

然后你就可以连接了:

$connector = new connection();
$connection = $connector->connection();

如果您使用的是模型连接,您可以通过以下方式获得连接:

$user = new User();
$user->getConnection();

您也可以使用 ConnectionFactory 建立新连接:

$connection = new Illuminate\Database\Connector\ConnectionFactory();

更多信息可以看laravel API doc

【讨论】:

  • 很有趣,但这是创建新的连接实例,我能以某种方式获得现有的连接吗?
  • 在同一界面上尝试 getDefaultConnection。
  • 也许我不明白,也许你可以用代码更新你的答案。但据我所知getDefaultConnection,它只返回连接的字符串名称而不是具体的连接......跨度>
【解决方案2】:

试试这个:

$pdo = $eloquentConnection->getConnection()->getRawPdo();

干杯

【讨论】:

    猜你喜欢
    • 2016-06-17
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多