gpt4 book ai didi

sql - 为什么变量在 `execute` SQL 查询中需要单引号?

转载 作者:太空宇宙 更新时间:2023-11-03 18:11:17 24 4
gpt4 key购买 nike

给定 name = "Ben",这不起作用:

DB.execute("SELECT id FROM departments WHERE name = #{name}")

但是这样做(添加单引号):

DB.execute("SELECT id FROM departments WHERE name = '#{name}'")

为什么?为什么 Ruby 不调用第一个例子中的变量?它已经是一个字符串。我不明白为什么这会有什么不同。这不是等同于传递 "'Ben'" 吗?这不等同于传递 "Ben" 吗?

最佳答案

这不是 Ruby 的问题,而是 SQL 语法的问题。

WHERE name = tom 

WHERE name = 'tom'

是两个不同的东西。

在第一种情况下,它被视为模式对象名称(这里可能是列名),在第二种情况下,它是一个字符串文字。

每当您使用一种编程语言通过直接字符串操作为另一种编程语言(这里是 Ruby -> SQL)创建程序时,您都会遇到同样的问题。

正确的方法是使用绑定(bind)变量。

WHERE name = ?

这也解决了 name 包含特殊字符的问题。

name = "Little Bobby Tables, see http://xkcd.com/327/"

关于sql - 为什么变量在 `execute` SQL 查询中需要单引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33774849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com