簡體   English   中英

如何使用參數化查詢更新 SQL?

[英]How to update SQL with Parameterized Query?

我有這個 SQL 聲明:

var sql = UPDATE tableName SET ? = ? WHERE ? = ?";

db.query(
    sql,
    [asset.getColOne(), asset.getValOne(), asset.getColTwo(), asset.getValTwo()],
    callback
);

{
        "colOne": "colName",
        "valOne": 1,
        "colTwo": "colName",
        "valTwo": 0
}

但是當我嘗試執行它時,出現語法錯誤,指出我的 SQL 語句是:

錯誤代碼:1064。您的 SQL 語法有誤; 查看與您的 MariaDB 服務器版本對應的手冊,了解在第 1 行的 ''colName' = 1 WHERE 'colName' = 0' 附近使用的正確語法

有什么方法可以指定列名或克服單引號嗎? 謝謝

您不能將表名或列名作為參數傳遞給查詢。 准備好的語句機制旨在傳遞文字值,而不是此類元數據。

在這里,您需要使用字符串連接:

var sql = "UPDATE tableName SET `" + asset.getColOne() + "` = ? WHERE `" + asset.getColTwo() + "` = ?";
db.query(sql, [asset.getValOne(), asset.getValTwo()], callback);

請注意,我在表名和列名周圍添加了反引號,以防它們作為未加引號的標識符無效。

但是請記住,如果變量來自您的代碼外部,使用這種技術會打開您的代碼以進行 SQL 注入。 如果是這樣,那么您需要在連接查詢之前手動驗證列名(例如,通過根據固定的值列表檢查它們)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM