programing

노드 MySQL 이스케이프 LIKE 문

bestprogram 2023. 10. 24. 21:28

노드 MySQL 이스케이프 LIKE 문

노드-mysql에서 MySQL LIKE 문을 탈출하려면 어떻게 해야 합니까?

어떤 일이 일어날 때마다

"SELECT * FROM card WHERE name LIKE '%" + connection.escape(req.body.search) + "%'"

결과:

'SELECT * FROM card WHERE name LIKE \'%\'hello\'%\''

그것은 구문 오류입니다.다음의 대체 구문을 사용하는 경우

connection.query("SELECT * FROM card WHERE name LIKE '%?%'", req.body.search, function () {});

유사한 구문 오류가 발생합니다.저도 노력했습니다.

connection.query("SELECT * FROM card WHERE name LIKE ?", '%' + req.body.search + '%', function () {});

결국 '%' 기호를 벗어나는 것입니다.

왜 도망치는지 확실하지 않습니다.%당신의 마지막 예에서, 그것은 나에게 잘 통하기 때문입니다.

// lifted from my code:
var value = 'ee20e966289cd7';
connection.query('SELECT * from django_session where session_key like ?', '%' + value + '%', ...)

// Result:
[ { session_key: '713ee20e966289cd71b936084a1e613e', ... } ]

드라이버에서 디버깅을 켤 때(통과)debug:true의 논거로mysql.createConnection), % 기호를 벗어나지 않습니다.

{ command: 3,
  sql: 'SELECT * from django_session where session_key like \'%ee20e966289cd7%\'' }

(단 하나의 인용문은 제외되지만, 표시 목적으로만 사용됩니다.)

(사용)mysql@2.0.0-alpha8)

나는 이런 것으로 성공을 거둔 적이 있습니다.

"SELECT * FROM card WHERE name LIKE " + connection.escape('%'+req.body.search+'%')

어때.

mysql.format("SELECT * FROM card WHERE name LIKE CONCAT('%', ?,  '%')", req.body.search)

?

당신은 언제든지 할 수 있습니다.

variable = '%${variable}%'
"SELECT * FROM 'table' WHERE ('foo' LIKE ?);", 
[variable], callback =>

저도 같은 문제가 있어서 이렇게 해결했습니다.

function search(searchTerm) {

    let replacement = `'%${searchTerm}%'`;

    let sqlStatement = `SELECT * from  clients where firstName LIKE ${replacement}`;

    const [rows, fields, error] = connection.query(sqlStatement);

    return rows;

}

간단하고 쉬운 방법:

`SELECT * FROM card WHERE name LIKE ` + connection.escape(`%${req.body.search}%`)

언급URL : https://stackoverflow.com/questions/17922587/node-mysql-escape-like-statement