mysql - node mysql2 kan inte komma åt uppdateringsresultat
Jag gör en enkel UPDATE med mysql2 :
UPDATE table1
SET table1.value1 = ?, table1.value2 = ?
WHERE user_id = (
SELECT user_id
FROM user
WHERE company_id = ?
)
table1 är kopplat till användartabellen via user_id, men jag har bara company_id så jag gör en underfråga (det borde förmodligen vara en join, men det är en annan diskussion):
const [results, buff] = await connection.execute(query, values);
return results
Men när man öppnar resultaten för att säkerställa att det inte finns några fel och att endast en rad uppdateras, returnerar results:
console.log
ResultSetHeader {
fieldCount: 0,
affectedRows: 1,
insertId: 0,
info: 'Rows matched: 1 Changed: 0 Warnings: 0',
serverStatus: 2,
warningStatus: 0,
changedRows: 0
}
Men jag kan inte komma åt värdena. Om jag försöker results.affectedRows får jag
Property 'affectedRows' does not exist on type 'RowDataPacket[] | RowDataPacket[][] | OkPacket | OkPacket[]'.
Det enda sättet att få det att fungera är att göra results['affectedRows']. Några förslag?
Svar #1
Så jag glömde att nämna att detta är ett TypeScript-fel, och jag kunde fixa det genom att göra:
const [results, buff] = await connection.execute(query, values);
const json: any = results;
return json.affectedRows //or whatever property I want
Detta fungerar också:
const [results, buff] = await connection.execute(query, values);
return results as any; //then in the calling fuction access the properties I want
Svar #2
försök kanske på detta sätt:
let result = await db.execute($sql, values);
result = JSON.parse(JSON.stringify(result));
console.log(result)
utdata kommer att vara :
{
fieldCount: 0,
affectedRows: 1,
insertId: 0,
info: 'Rows matched: 1 Changed: 1 Warnings: 0',
serverStatus: 2,
warningStatus: 0,
changedRows: 1
}
på detta sätt gör det på något sätt till ett normalt objekt som kan nås
så att objektet kan nås som result.affectedRows, result.insertId, ...
