gpt4 book ai didi

ruby - 使用多个参数插入会给出 SQLite3::RangeException

转载 作者:行者123 更新时间:2023-12-02 04:35:02 25 4
gpt4 key购买 nike

我正在使用 Ruby Sqlite3 库将一些记录插入数据库。我在使用下面的语句时遇到问题(我已经尝试了发布的所有变体);我收到 SQLite3::RangeException - 绑定(bind)或列索引超出范围: 异常。

如果我只是将值硬编码到查询中,查询就可以工作......那么我做错了什么?

  statement = db.prepare("insert into IntegrationLogin (Username, Password, ProjectID) values (\"?1\", \"?2\", 1)")
statement.execute [params['username'], params['password']]

statement = db.prepare("insert into IntegrationLogin (Username, Password, ProjectID) values (\"?1\", \"?2\", 1)")
statement.execute params['username'], params['password']

statement = db.prepare("insert into IntegrationLogin (Username, Password, ProjectID) values (\"?\", \"?\", 1)")
statement.execute params['username'], params['password']

最佳答案

我认为您的问题在于尝试将参数指示符(?)封装在引号中。这是不必要的,因为驱动程序会将字符串参数括在引号中,并在执行查询之前执行任何其他转义。当我删除引号时,您的示例查询执行得很好。

看来您多余的引号以某种方式转义了参数指示器,而驱动程序没有看到它们。

使用这个:

statement = db.prepare("插入 IntegrationLogin (用户名、密码、项目 ID) 值 (?, ?, 1)")

你让事情变得比需要的更加困难。不用担心,这种参数绑定(bind)完全可以防止 SQL 注入(inject),即使没有额外的引号。

关于ruby - 使用多个参数插入会给出 SQLite3::RangeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6231740/

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