2013-04-28 2 views
1

У меня есть следующая таблица:Вставка в таблицу Postgresql с Go

CREATE TABLE Users (
    user_id BIGSERIAL PRIMARY KEY, 
    email VARCHAR(50) NOT NULL, 
    password_hash VARCHAR(100) NOT NULL, 
    points INT DEFAULT 0, 
    created_at TIMESTAMP NOT NULL DEFAULT NOW(), 
    updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 
) 

Я беру в электронную почту и пароль, шифровать пароль и попытаться вставить их в таблицу:

import (
    _ "github.com/lib/pq" 
    "database/sql" 
    "code.google.com/p/go.crypto/bcrypt" 
) 

conn := OpenConnection() 
defer conn.Close() 
email := r.FormValue("email") 
password, _ := bcrypt.GenerateFromPassword([]byte(r.FormValue("password")), bcrypt.DefaultCost) 
res, err := conn.Exec("INSERT INTO users (email, password_hash) VALUES (?, ?)", email, password) 
http.Redirect(w, r, "/", http.StatusFound) 

Вставка выбрасывает pq: P:"51" S:"ERROR" L:"1002" C:"42601" M:"syntax error at or near \",\"" F:"scan.l" R:"scanner_yyerror". Такая же ошибка возникает, если я заменю пароль байтового типа простой строкой.

Что я делаю неправильно?

+0

Это может помочь: https://github.com/lib/pq/issues/65 –

+0

@IanKenney, ну это глупо, но, кажется, быть проблемой. благодаря –

ответ

2

Я отправлю как ответ в случае, если ссылка уходит: Из https://github.com/lib/pq/issues/65

по dpapathanasiou: Я выяснял проблему; это не ошибка в pq, но в способе, которым я создал : для связанных параметров.

Так что все эти заявления работают правильно:

stmt, err := db.Prepare("select id from people where firstname = ($1) and lastname = ($2)") 
stmt, err := db.Prepare("select id from people where firstname ~* ($1) and lastname ~* ($2)") 
stmt, err := db.Prepare("select id from people where firstname = ($1)") 
Смежные вопросы