我对mysql很新,我正试图使用node-mysql在节点中启动并运行它。我创建了一个简单的表:
CREATE TABLE myTable (
id SERIAL,
display BOOLEAN NOT NULL DEFAULT 1,
active BOOLEAN NOT NULL DEFAULT 0
) DEFAULT CHARSET utf8 COLLATE utf8_bin;
我按这样插入行:
db.query('INSERT INTO myTable SET ?', {
display: myObject.display,
active: myObject.active
}, callback);
正如文档所说,node-mysql将我传入的对象转换为键值对。如果myObject.display
和myObject.active
都已定义,则效果很好。如果其中一个或两个都不是,则node-mysql尝试将NULL
插入到列中,这是不允许的。我打算在这种情况下使用默认值,但它会抛出有关NULL
值的错误。所以我的问题是:
1)在创建一个在给出空值时将使用默认值的表时,是否有一些特殊语法可用,或者2)是否有一些优雅的方法可以使用不涉及一堆的node-mysql来执行此操作对象解析?
如果您看到我可以改进的其他内容,请随意扩展您的答案。我的更大目标是学习在节点中创建健壮,安全,简洁的mysql插入的最佳方法。
答案 0 :(得分:0)
您的SQL语法对于INSERT语句不正确。
插入强>
INSERT into TableName(id, display, active)
VALUES (?, ?, ?)
<强>更新强>
UPDATE TableName SET display = ?
WHERE id = ?
然后,您将使用?
填充db.query()
占位符并传入您的参数。