真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

不敢相信,相同SQL下Mybatis查詢結果和數據庫竟然不一樣!

一、問題描述

mybatis查詢無結果, 數據庫運行相同sql查詢出結果, 如下

創(chuàng)新互聯(lián)網站建設由有經驗的網站設計師、開發(fā)人員和項目經理組成的專業(yè)建站團隊,負責網站視覺設計、用戶體驗優(yōu)化、交互設計和前端開發(fā)等方面的工作,以確保網站外觀精美、成都網站制作、網站設計、外貿網站建設易于使用并且具有良好的響應性。

  • 這是數據庫記錄

    不敢相信,相同SQL下Mybatis查詢結果和數據庫竟然不一樣!

    image.png

  • 這是mybatis查詢出的結果, 記錄條數0

    不敢相信,相同SQL下Mybatis查詢結果和數據庫竟然不一樣!

    image.png

  • 這是直接將控制臺一模一樣的sql查詢語句放到Navicat執(zhí)行的結果, 記錄條數1

    不敢相信,相同SQL下Mybatis查詢結果和數據庫竟然不一樣!

    image.png

二、解決辦法

where條件后的username = '${username}'and password = '${password}'置為同一行

????
????????SELECT
????????
????????FROM?user
????????where?username?=?'${username}'
????????and?password?=?'${password}'
????
????
????????SELECT
????????
????????FROM?user
????????where?username?=?'${username}'?and?password?=?'${password}'
????

可以看到, 查詢結果一致

不敢相信,相同SQL下Mybatis查詢結果和數據庫竟然不一樣!

image.png

三、異常分析

  1. 很多小伙伴都遇到過類似問題, 很懵逼, 難不成mybatis bug? 沒, 原因可能千萬種, 但根本原因基本上就一個, 那就是實際查詢語句與我們看到的sql不一致, 即, sql寫的有問題

  2. 再來分析一下上面這個問題, 看似xml sql沒有問題, 控制臺打印的sql也沒問題, 但放到數據庫執(zhí)行結果就不一致了, 因為, xml sql兩個條件換行了, mybatis實際執(zhí)行的sql是這樣的:

SELECT?id,?username,?password?FROM?user?where?username?=?'aaa'?#?''?and?password?=?'xxx'

并不是控制臺打印的sql:

SELECT?id,?username,?password?FROM?user?where?username?=?'aaa'?#?''?and?password?=?'xxx'

查詢結果自然不一致

四、總結

本文只是提供一種解決類似問題的思路, 出錯原因可能不一樣, 但問題關鍵就是實際執(zhí)行的sql不一致, 才會導致mybatis和MySQL查詢結果不一致, 所以, 仔細點, 檢查sql

另, 本文是為了測試sql注入, 所以用的${username}, 實際應該使用#{}

點擊獲取?附送學習進階架構資料、PDF書籍文檔、面試資料

不敢相信,相同SQL下Mybatis查詢結果和數據庫竟然不一樣!

不敢相信,相同SQL下Mybatis查詢結果和數據庫竟然不一樣!


網站題目:不敢相信,相同SQL下Mybatis查詢結果和數據庫竟然不一樣!
地址分享:http://weahome.cn/article/piiddd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部