MySQL 是一種常用的關系型數據庫管理系統,但在使用過程中,我們可能會遇到字符串不正確的問題。
例如,有時我們在執行 SELECT 語句時,會發現無法查詢到匹配的結果,原因是可能字符串不符合要求。
SELECT * FROM my_table WHERE name='John'
上面的語句看起來很簡單,但如果我們的數據庫表中的 name 字段存儲的是 John 這個值的 UTF-8 編碼,那么就無法成功查詢。
此時,我們應該將查詢語句修改為以下形式:
SELECT * FROM my_table WHERE name=CONVERT('John' USING utf8)
這樣就可以在比較字符串時,將編碼方式轉換為 utf8,確保能夠正確匹配。
除此之外,如果我們在程序中手動拼接 SQL 語句時,也需要注意字符串的正確性。
// 假設用戶輸入了以下的敏感詞 $keyword = "'; DROP TABLE users; --"; // 拼接 SQL 語句 $sql = "SELECT * FROM my_table WHERE name='$keyword'";
上面的代碼中,我們沒有對 $keyword 變量進行任何的過濾處理,直接拼接到了 SQL 語句中,這會導致嚴重的 SQL 注入漏洞。
為了避免這種情況的出現,應該使用參數化查詢,將變量以參數的形式傳入 SQL 語句中。
// 假設用戶輸入了以下的敏感詞 $keyword = "'; DROP TABLE users; --"; // 使用參數化查詢 $stmt = $pdo->prepare('SELECT * FROM my_table WHERE name=?'); $stmt->execute([$keyword]);
這樣就能夠確保查詢的安全性,避免 SQL 注入的問題。