2013-04-13 4 views
1

Ruby를 사용하여 localhost에서 MySQL에 값을 삽입하려고합니다. 내가 삽입하고 싶은 값은 트위터 검색 결과입니다. 내 프로그램은 결과를 파일에 성공적으로 쓸 수 있으므로 이제 결과를 MySQL에 삽입하려고합니다. 여기에 내 코드의 일부는 다음과 같습니다Ruby Mysql의 테이블에 값을 삽입하지 못했습니다.

results = @search.perform("yahoo", 100) 
client = Mysql2::Client.new(:host => "localhost", :username => "root", :password => "123", :database => "db1") 
results.map do |status| 
insert = client.query ("INSERT INTO table1 (fromuser, tweet) VALUES (#{status.from_user},#{status.text})") 
end 

오류는 "당신은 당신의 SQL 구문에 오류가있다; 근처 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인하십시오"입니다 라인 1에서 "짹 짹짹 (Mysql2 :: 오류)
무엇이 오류의 원인이 무엇입니까?

내가 발견 한 또 다른 문제는 다음과 같은 코드를 사용하여 MySQL에 값을 입력 할 때 다른 오류가 발생한다는 것입니다. "알 수없는 열 'in'필드 목록 '(Mysql :: ServerError :: BadFieldError) "

require 'mysql' 
require 'rubygems' 
sql = Mysql.real_connect("localhost", "root", "123", "db1") 
st1 = "a" 
st2 = "b" 
user_string = "(#{st1},#{st2})" 
query="INSERT INTO table1 (fromuser, tweet) VALUES" + user_string 
sql.query(query) 

테이블에 "a"와 "b"를 삽입하고 싶습니다. 어떻게 해결할 수 있습니까? 사전에

덕분에,

답변

2

앤드류 말했듯이, 당신은 확실히 당신의 데이터를 탈출하고 싶다.

난 당신이 또한 값을 인용 할 필요가 있다고 생각 :

 
insert = client.query("INSERT INTO tweets (from_user, tweet_text) 
         VALUES ('#{client.escape(status.from_user)}', 
           '#{client.escape(status.text)}')") 
+0

고맙습니다, tjmw. 정말 감사. 이제 작동합니다. 견적과 탈출이 필요합니다. – user605947

+0

아, 잘 했어. MySQL을 사용하지 않고 이스케이프 할 때 어댑터가 따옴표를 추가한다고 가정했습니다. –

1

당신은에 데이터를 삽입하는 데이터베이스에서 테이블을 만들 CREATE TABLE를 사용해야합니다. 현재 데이터베이스 이름 ("db1") 자체에 데이터를 삽입하고자한다고 말하고 있습니다.

또한, 먼저 데이터를 탈출해야합니다

insert = client.query("INSERT INTO tweets (from_user, tweet_text) 
         VALUES (#{client.escape(status.from_user)}, 
           #{client.escape(status.text)})") 
+0

내 테이블의 이름은 실제로 DB1입니다. 나는 그것을 새로운 것으로 명명해야한다고 생각한다. 그러나 나는 데이터를 벗어난 후에도 여전히 같은 오류가 발생합니다. – user605947

관련 문제