繁体   English   中英

Laravel数据库选择方法问题与表名中的空格?

[英]Laravel database select method issue with spaces in table name?

我试图通过DB类查询远程数据库连接,并且在传递参数作为表名时遇到问题。

这有效并返回预期结果:

$result = DB::connection('remote')->select('select * from "Users who can post batch"');

但是,这些语句不:

// $view->name returns; string(34) "Users who can post batch"
$result = DB::connection('remote')->select('select * from ?', array( $view->name ));
$result = DB::connection('remote')->select('select * from "?"', array( $view->name ));
$result = DB::connection('remote')->select('select * from [?]', array( $view->name ));
$result = DB::connection('remote')->select('select * ' . $view->name );

我收到此错误:

SQLSTATE[HY000]: General error: 102 General SQL Server error: Check messages from the SQL Server  
[102] (severity 15) [(null)] (SQL: select * from ?) (Bindings: array ( 0 => 'Users who can post batch', ))

我究竟做错了什么?

资源资源

Laravel数据库文档: http ://laravel.com/docs/database

您从一个没有告诉您所有内容的页面获得了答案。 不要直接在纯文本中使用查询。 通常,您应该尝试使用QueryBuilder创建查询,但是,当然,如果不可能,请至少使用DB :: raw()创建查询:

$result = DB::connection('remote')->select(DB::raw('select * from "' . $view->name . '"'));

Laravel将转义您的查询以防止SQL注入。

使用参数,我已经为您看到的正确版本是您已经尝试过的:

$result = DB::connection('remote')->select(DB::raw('select * from "?"'), array($view->name));

但是,使用SQL Server,事情并不能完全按照我们的预期进行。 因此,看一下您的服务器日志,您可能会在这里找到问题的根源:

SELECT t.[text]
FROM sys.dm_exec_cached_plans AS p
CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) AS t
WHERE t.[text] LIKE N'%something unique about your query%';

DB :: raw这是您添加更多参数的方式

$result = DB::connection('remote')->select(DB::raw('select * from "' . $view->name . '" where id = ?', array(1)'));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM