MySQL占位符在WHERE子句上引发错误

i34xakig  于 2023-01-25  发布在  Mysql
关注(0)|答案(2)|浏览(151)

我正在使用MySQL占位符,并创建承诺使用异步等待。

selectTickets: (variable) => {
    const sqlStatement = `SELECT * FROM tickets WHERE userID = ?`;
    return new Promise((resolve, reject) => {
        db.query(sqlStatement, variable, (error, response) => {
            if (error) return reject(error);
            return resolve(response);
        });
    });
},

我甚至尝试用插值来创建语句,但却出现了错误:“”where子句“中的未知列”未定义“”
这是我的代码。但是当我在react中使用它时,我得到错误500状态,说语句不正确。

ode: 'ER_PARSE_ERROR',
  errno: 1064,
  sqlMessage: "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '?' at line 1",
  sqlState: '42000',
  index: 0,
  sql: 'SELECT * FROM tickets WHERE userID = ?'

我试过很多其他的方法。但是其他使用相同类型函数和相同类型语句的函数都工作得很好。
作为回应,我有这样的呼吁:

const URL_TICKETS_BY_USERID = 'http://localhost:3000/api/get-tickets';
  const config = {
    headers: { Authorization: `Bearer ${user.token}` }
};
  const userID = user.userID;

  axios.get(URL_TICKETS_BY_USERID,
        userID,
        config
    )
    .then(data => console.log(data))
    .catch(error => console.log(error))

能帮我个忙吗?

rta7y2nd

rta7y2nd1#

问题出在db.query()调用中,第二个参数应该是一个数组,即使是单个值,也应该可以:

db.query(sqlStatement, [variable], (error, response) => {
  if (error) return reject(error);
  return resolve(response);
});

axios get()也有两个参数:url和config(可选)。这意味着任何参数都应该是该配置对象的一部分:

const config = {
  headers: { Authorization: `Bearer ${user.token}` },
  params: {
    id: user.userID
  }
};
axios.get(URL_TICKETS_BY_USERID, config)

或者将其作为GET参数传递到URL中:

axios.get(URL_TICKETS_BY_USERID + "?id=" + user.userID, config)
zzoitvuj

zzoitvuj2#

在我的例子中,它是问号。在某些数据库系统中,问号用作单独传入的值的占位符。但是,在我的例子中,数据库系统似乎没有将问号识别为占位符,而是将其解释为查询的一部分。因此将查询更改为:-

const q = `SELECT * FROM list WHERE userid = ${listId}`;

我在查询内部传递了变量,它现在可以工作了

相关问题