exports.createTaskDataForNewDay = async function(values) { try { console.log("values", JSON.stringify(values)) let pool = await CreatePool() //[timestamp , requiredTimes , reward , difficulty ,taskId , uid , csn] let query = "update userTaskData set timestamp = ?,requiredTimes=?,timesCompleted=0,reward=?,difficulty=?,state=1,taskId=?,replacedF=0,replacedC=0 where uid =? and suitCase = ?" let resp = await pool.query(query, [values]) if (resp.changedRows > 0) { return resp } else return { code: 400, mesage: "Could not insert data ! please try again or check syntax" } } catch (error) { console.error(error) return { code: 500, message: error.message } } }
Der an die Funktion übergebene „Wert“ ist ein Array von Arrays. Jedes Element enthält Platzhalterdaten für eine andere Zeile, die ich aktualisieren möchte. Aber ich erhalte die Fehlermeldung Parse Error – Es stimmt etwas mit der Syntax nicht und die protokollierte Abfrage ist -
sql: `update userTaskData set timestamp = (1686124176992, 1, '{\"t\":\"c\",\"v\":1000}', 1, 't1', '21GGZzSudOdUjKXcbVQHtFtTK772', 1), (1686124176992, 3, '{\"t\":\"g\",\"v\":10}', 1, 't9', '21GGZzSudOdUjKXcbVQHtFtTK772', 1), (1686124176992, 5, '{\"t\":\"c\",\"v\":4000}', 2, 't17', '21GGZzSudOdUjKXcbVQHtFtTK772', 1), (1686124176992, 3, '{\"t\":\"c\",\"v\":1000}', 3, 't21', '21GGZzSudOdUjKXcbVQHtFtTK772', 1),requiredTimes=?,timesCompleted=0,reward=?,difficulty=?,state=1,taskId=?,replacedF=0,replacedC=0 where uid =? and suitCase = ?
Alle Elemente werden im ersten Platzhalter platziert. Es funktioniert gut für Einfügeabfragen. Bitte sagen Sie mir, was ich falsch mache.
也许“值”已经是一个数组,不需要包装在另一个数组中。您可以直接传递,如下:
让 resp =等待池.query(查询,值);
mysqljs/mysql
模块不支持通过objects
或arrays
进行批量记录,用于UPDATE
方法与您熟悉的INSERT
方法相同。您所想象的甚至不是 MySQL 的本机功能并且最多只能通过如果您想使用实际的UPDATE
方法,请切换CASE
。这给你留下了两个选择:
选项 1
只要您的表和为更新提供的数据包含唯一键,您就可以使用 INSERT INTO table_name SET ?关于重复密钥更新...
选项 2
如果您在给定表的查询中没有唯一的键控字段和相应的值,则必须通过迭代条目来构建查询,这样您最终会得到一个包含任意多个
的字符串集合更新
您将拥有的查询 - 或 - 通过构建利用CASE
条件的查询。您可以在此处查看一些示例:如何在POST body的基础上创建动态插入语句