gpt4 book ai didi

mysql - 使用 dbi gem 的 ruby​​ 脚本在带有新索引的 mysql 表中插入错误

转载 作者:行者123 更新时间:2023-11-29 00:52:17 24 4
gpt4 key购买 nike

我有一个 ruby​​ 脚本使用 dbi gem 重复执行以下 INSERT 语句:

sql = "INSERT INTO traffic_by_pages (publication_id, subdomain, region_id, region_name, page_url, site_section, yr, mnth, dy, TrafficDate, DailyVisitors, DailyVisits, DailyPageViews, NewVisitors, ReturningVisitors, object_id, object_type) VALUES (#{publication_id}, '#{subdomain}', #{region_id}, '#{region_name}', '#{page_url}', '#{site_section}', #{yr}, #{mnth}, #{dy}, '#{trafficdate}', #{dailyvisitors}, #{dailyvisits}, #{dailypageviews}, #{newvisitors}, #{returningvisitors}, #{obj_id}, '#{objectType}');"

此脚本在几天前运行良好,但出现以下错误:

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 ' '')'.

错误似乎是从在要插入的表的 object_id 和 object_type 上添加索引开始的。我之所以得出这个结论,是因为如果我不为 object_id 插入一个值,该语句就会神奇地起作用。另外,我从我们的开发版本的表中删除了索引,oila!它再次工作。我需要保留这个索引。

有没有人处理过这个问题?我即将使用事件记录重写脚本。整个脚本从 MS SQL Server 数据库中提取数据并插入到 MySQL 数据库中。

我还应该补充一点,当谈到用 Ruby 编程时,我真的不知道自己在做什么,而且我不确定这个脚本最终是如何用 Ruby 编写的。任何帮助将非常感激。谢谢!

最佳答案

这听起来像是引用问题。仔细查看错误信息:

 ' '')'

在您的 SQL 中,您将得到一个空格后跟一个空字符串文字,后跟一个右括号。您添加了 object_idobject_type 列,但一切都坏了,所以问题可能出在 object_type 值中。

您不应该使用字符串插值来构建 SQL 语句,您应该使用占位符。这些方法之一可能会有所帮助:

sql = 'INSERT INTO traffic_by_pages (publication_id, subdomain, region_id, region_name, page_url, site_section, yr, mnth, dy, TrafficDate, DailyVisitors, DailyVisits, DailyPageViews, NewVisitors, ReturningVisitors, object_id, object_type) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
# For each row...
dbh.do(sql,
publication_id,
subdomain,
region_id,
region_name,
page_url,
site_section,
yr,
mnth,
dy,
trafficdate,
dailyvisitors,
dailyvisits,
dailypageviews,
newvisitors,
returningvisitors,
obj_id,
objectType
)

# or
sth = dbh.prepare(sql)
# for each row...
sth.execute(publication_id, subdomain, region_id, ...)

它启动和停止工作很奇怪,但这可能只是您调试工作的副作用。

关于mysql - 使用 dbi gem 的 ruby​​ 脚本在带有新索引的 mysql 表中插入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7940665/

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