为什么$ results = DB :: select有效而DB :: table不起作用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么$ results = DB :: select有效而DB :: table不起作用?相关的知识,希望对你有一定的参考价值。

我是laravel的新手。

我有这个mysql驱动程序

'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'database'),
            'username' => env('DB_USERNAME', 'user'),
            'password' => env('DB_PASSWORD', 'pass'),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

以及在我的database.php

我有'default'=> env('DB_CONNECTION','mysql'),

所以当我在控制器中运行时

 $results = DB::table('adventureworks2017.sales.store')->get()-first();

它给我错误

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.`store`' at line 1 (SQL: select * from `adventureworks2017`.`sales`.`store`)

while

 $results = DB::select('SELECT * FROM adventureworks2017.`sales.store` limit 5'); it workes

任何原因查询生成器在传递语句有效时都无法正常工作吗?

答案

假设您的表实际上称为sales.store,这:

$results = DB::table('adventureworks2017.sales.store')->get()-first();

实际上应该是:

$results = DB::table('adventureworks2017.`sales.store`')->first();

注意表名前后使用反引号。

顺便说一句,我不建议在表名中使用点(.)。

以上是关于为什么$ results = DB :: select有效而DB :: table不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

在 CodeIgniter 中调用未定义的方法 CI_DB_mysqli_result::where()

将 db 值存储到 php 数组中,然后遍历数组

测试一个注入小脚本

CodeIgniter 中 $query>num_rows() 和 $this->db->count_all_results() 之间的区别 & 推荐哪一个

在CodeIgniter中调用未定义的方法CI_DB_mysqli_result :: where()

DB门面,查询构建器,Eloquent ORM三者的CURD