MySQL中使用LIKE語句時,是否會有SQL注入的風險呢?我們先來了解一下LIKE語句。
LIKE語句用于匹配字符型列中的模式,通常結合%和_通配符使用。例如:
SELECT * FROM users WHERE name LIKE '%John%';
上面的查詢語句將會匹配所有名字中含有“John”字符的用戶。但是,如果用于LIKE語句中的模式是從用戶輸入的變量中得到的,就會有SQL注入的風險。
比如,下面的代碼:
$name = $_GET['name']; $sql = "SELECT * FROM users WHERE name LIKE '%$name%'";
如果用戶輸入的$name變量中包含了惡意代碼,比如' OR 1=1 --,那么就會劫持本來的查詢語句,執行惡意代碼。
這種攻擊方式就是SQL注入。因此,在使用LIKE語句時,必須對用戶的輸入進行過濾和檢查,避免注入攻擊的發生。
例如,可以使用PDO預處理語句,將要匹配的模式放入綁定變量中:
$name = $_GET['name']; $stmt = $pdo->prepare("SELECT * FROM users WHERE name LIKE ? "); $stmt->execute(array("%$name%"));
這種方式可以有效地避免SQL注入的風險,保障應用程序的安全。