php原始sql查询,关于php:在Laravel 4中逃避原始SQL查询

如何在Laravel 4中转义传递给原始查询的参数? 我期待像DB::escape()(从Laravel 3敲响钟声)并尝试DB::quote()(我认为可以通过PDO对象获得)

$query = DB::select("SELECT * FROM users WHERE users.id =" . DB::escape($userId));

我们不能将select方法与占位符一起使用,因为上面只是我们尝试实现的简化示例。 我们有一个大型自定义查询,其中包含一些无法适应查询构建器的嵌套选择查询。

插入Laravel 4之前逃避某些事情的最佳方法是什么?

编辑:

我刚刚发现你可以访问PDO对象并以这种方式使用quote函数。 这仍然是最好的方法,还是有更简单的方法来访问此功能?

DB::connection()->getPdo()->quote("string to quote");

谢谢。 包含解决方案的+1(你也可以将它作为答案分开发布,并接受它......可以为我们节省一些时间)

@ J.Bruni,好点! 我现在已将其添加为实际答案,因此应该更容易找到。

您可以通过DB外观以这种方式引用字符串。

DB::connection()->getPdo()->quote("string to quote");

当我发现它时,我确实把这个答案放在我的问题中,但是我现在把它作为一个实际的答案,让其他人更容易找到。

谢谢!令人惊讶的是人们如何坚持回答错误的问题。我需要和你一样的答案,参数在我的情况下也不起作用。

工作,但这么长的事情要打电话! DB :: escape()会很好。

$value = Input::get("userID");

$results = DB::select( DB::raw("SELECT * FROM users WHERE users.id = :value"), array(

'value' => $value,

));

更多细节在这里

这没有回答这个问题,它表示我不是在寻找带有占位符的解决方案,而是寻找逃避一个变量的适当方法。

@Dwight:因为没有实际意义。当您转义为将变量值实际编码为SQL时,占位符也是如此。 PDO也是如此。

要注意,我在使用这个和更多where语句时遇到了问题。查询构建器不会将select()中的占位符与where中的其他动态替换组合在一起。

@hakre如果我需要将一堆(变量数)变量放入语句的"IN()"部分,该怎么办?

@Janis:你能找到这样的问题吗?我可以将数组绑定到IN()条件吗?这是姐姐的问答。

您也可以试试这个,(阅读文档)

$results = DB::select('SELECT * FROM users WHERE users.id = ?', array($userId));

这个答案+1。使用数组绑定(如上例所示)将保护您。更多信息,请访问forums.laravel.io/viewtopic.php?id=11068

这没有回答这个问题,它表示我不是在寻找带有占位符的解决方案,而是寻找逃避一个变量的适当方法。

@Dwight,这是array binding/bound params所做的,安全的,转义的,不能应用sql注入而不仅仅是占位符。请阅读此答案以清除自己。

@Dwight,还注意到第一条评论,没有澄清你吗?

在寻找Laravel中的通用sql转义时,我发现了这个问题。我实际需要的是表/列名称转义。所以,供将来参考:

/**

* Quotes database identifier, e.g. table name or column name.

* For instance:

* tablename -> `tablename`

* @param  string $field

* @return string

*/

function db_quote_identifier($field) {

static $grammar = false;

if (!$grammar) {

$grammar = DB::table('x')->getGrammar(); // The table name doesn't matter.

}

return $grammar->wrap($field);

}

DB::query()->getGrammar()可能是一种更直接的方法。让其他开发者不要问太多问题。

我在Laravel 5的helpers.php中使用它:

if ( ! function_exists('esc_sql'))

{

function esc_sql($string)

{

return app('db')->getPdo()->quote($string);

}

}

然后我可以使用esc_sql函数,我需要为原始SQL查询进行pergorm转义。

我使用的两个答案在DB外观中内置了较少的详细解决方案。

一,价值引用:

// From linked answer

DB::connection()->getPdo()->quote("string to quote");

// In the DB facade

DB::getPdo()->quote('string to quote');

二,标识符引用(表名和列名):

// From linked answer

DB::table('x')->getGrammar()->wrap('table.column');

// In the DB facade

DB::getQueryGrammar()->wrap('table.column');

这是一个更全面的示例,展示如何转义值和列并扩展Laravel的querybuilder:

namespace App\Providers;

use Illuminate\Database\Query\Builder;

use Illuminate\Support\ServiceProvider;

class DatabaseQueryBuilderMacroProvider extends ServiceProvider {

public function register() {

Builder::macro('whereInSet', function($columnName, $value) {

/** @var \Illuminate\Database\Query\Grammars\Grammar $grammar */

$grammar = $this->getGrammar();

return $this->whereRaw('FIND_IN_SET(?,' . $grammar->wrap($columnName) . ')', [$value]);

});

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "Microsoft SQL Server 2008技术内幕: T-SQL查询源码" 是一本关于SQL Server 2008T-SQL查询的技术书籍。该书深入探讨了SQL Server 2008的查询引擎和T-SQL语言的内部工作原理。 T-SQL是SQL Server的编程语言,用于编写查询和操作数据库的指令。书通过分析T-SQL查询的源代码,揭示了SQL Server 2008的查询引擎是如何解析和执行查询的。读者可以深入了解查询处理器的内部机制,包括查询优化、查询重写、查询执行计划等方面。 通过阅读这本书,读者可以学习到优化T-SQL查询的技巧和策略。了解查询优化器的工作原理可以帮助开发人员编写高效的查询,提高系统的性能和响应速度。此外,书还介绍了T-SQL查询的执行计划,帮助读者理解查询的执行方式和流程。 除了T-SQL查询的源码解析外,这本书还涵盖了SQL Server 2008的其他关键技术。读者将了解到索引、数据访问方法、事务处理和并发控制等方面的知识。这将帮助开发人员合理设计数据库架构,提高系统的稳定性和可扩展性。 总之,"Microsoft SQL Server 2008技术内幕: T-SQL查询源码"是一本有关SQL Server 2008查询引擎和T-SQL语言的深度技术书籍。它提供了对查询处理器的全面理解,并帮助读者优化T-SQL查询、提高系统性能。同时,它还涵盖了SQL Server 2008的其他关键技术,提供了全面的数据库开发和管理指导。 ### 回答2: Microsoft SQL Server 2008是一款常用的关系型数据库管理系统,具有强大的数据存储和查询能力。T-SQL是SQL Server的一种查询语言,通过编写T-SQL查询语句,可以对数据库的数据进行查询、筛选和排序等操作。 T-SQL查询的源码指的是SQL Server内部实现这些查询的代码。通过查看T-SQL查询的源码,可以深入了解SQL Server的执行机制,帮助我们更好地优化查询性能和进行调试。 查询的源码包括了SQL Server的执行引擎、查询优化器和存储引擎等多个模块的代码。这些源码使用C++等编程语言编写,属于SQL Server的核心代码部分。通过分析源码,我们可以了解SQL Server是如何解析T-SQL查询语句、生成执行计划和执行查询的过程。同时,源码还包含了一些关键算法和数据结构的实现细节,这对于我们理解SQL Server的内部机制非常有帮助。 然而,由于SQL Server的源码属于Microsoft的商业机密,一般用户无法直接获取到完整的源码。只有Microsoft的工程师和合作伙伴才能访问和修改源码。但是,Microsoft会通过提供一些加密的DLL文件和一些公开的接口,让用户能够使用和扩展SQL Server的功能。 总的来说,虽然我们无法直接查看SQL Server 2008的T-SQL查询源码,但是通过学习SQL Server的文档和使用工具,我们仍然能够深入了解SQL Server的内部机制,并优化我们的查询性能。 ### 回答3: Microsoft SQL Server 2008是一种关系型数据库管理系统,它为用户提供了一个强大的平台来存储、管理和检索数据。T-SQL(Transact-SQL)是SQL Server的查询语言,用于编写存储过程、触发器、视图和其他数据库对象的脚本。 要查询T-SQL源码,可以参考以下步骤: 1. 首先,确保已经安装了SQL Server Management Studio(SSMS),它是一个图形化界面的工具,用于与SQL Server进行交互。 2. 打开SSMS,并连接到SQL Server 2008数据库实例。 3. 在“对象资源管理器”,展开“数据库”节点,找到包含要查询的T-SQL脚本的数据库。 4. 右键单击该数据库,选择“新建查询”或使用快捷键“Ctrl+N”创建一个新查询窗口。 5. 将要查询的T-SQL脚本复制并粘贴到查询窗口。确保脚本是有效的,并且已经被正确地复制到查询窗口。 6. 单击查询窗口工具栏上的“执行”按钮或使用快捷键“F5”来执行查询。 7. 执行查询后,将在结果窗口显示查询的结果。结果包括与T-SQL脚本相关的数据,如行数、列名和结果集。 通过这些步骤,您可以轻松地查询T-SQL源码,并查看与之相关的数据。这是一种方便的方法,可以帮助开发人员和数据库管理员更好地理解和管理SQL Server 2008的查询。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值