sql >> データベース >  >> RDS >> Mysql

このLIKEクエリ内の文字をエスケープするにはどうすればよいですか?

    MySQLマニュアル から :

    したがって、LIKEの文字列をエスケープする必要があります 2つのステップで演算子。

    PHPでは、次のようになります。

    // Your search string, for example, from POST field
    $string = $_POST['column'];
    
    // First step - LIKE escaping
    $string = str_replace(array('\\', '_', '%'), array('\\\\', '\\_', '\\%'), $string);
    
    // Second step - literal escaping
    $string = mysql_real_escape_string($string);
    
    // Result query
    mysql_query("SELECT * FROM `table` WHERE `column` LIKE '%".$string."%'");
    

    更新:

    MySQLiを使用する

    // Connect to database
    $mysqli = new mysqli('localhost', 'username', 'password', 'database');
    
    // Your search string, for example, from POST field
    $string = $_POST['column'];
    
    // First step - LIKE escaping
    $string = str_replace(['\\', '_', '%'], ['\\\\', '\\_', '\\%'], $string);
    
    // Second step - literal escaping
    $string = $mysqli->real_escape_string($string);
    
    // Result query
    $mysqli->query("SELECT * FROM `table` WHERE `column` LIKE '%{$string}%'");
    

    PDOを使用する

    // Connect to database
    $conn = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');
    
    // Your search string, for example, from POST field
    $string = $_POST['column'];
    
    // First step - LIKE escaping
    $string = str_replace(['\\', '_', '%'], ['\\\\', '\\_', '\\%'], $string);
    
    // Second step - literal escaping
    $string = $conn->quote($string);
    
    // Result query
    $conn->query("SELECT * FROM `table` WHERE `column` LIKE '%{$string}%'");
    

    または、PDOプリペアドステートメントを使用できます 、2番目のステップ(文字通りのエスケープ)の代わりに:

    // Connect to database
    $conn = new PDO('mysql:host=localhost;dbname=database', 'username', 'password');
    
    // Your search string, for example, from POST field
    $string = $_POST['column'];
    
    // First step - LIKE escaping
    $string = str_replace(['\\', '_', '%'], ['\\\\', '\\_', '\\%'], $string);
    
    // Prepare a statement for execution
    $statement = $conn->prepare("SELECT * FROM `table` WHERE `column` LIKE ?");
    
    // Execute a prepared statement
    $statement->execute(["%{$string}%"]);
    


    1. MySQLテーブルが存在するかどうかを確認します

    2. クエリ出力から開始タイムスタンプと終了タイムスタンプを持つ部分的/完全に重複するイベントを削除するにはどうすればよいですか?

    3. JDBCを使用してXAMPPMySQLローカルDBに接続するにはどうすればよいですか?

    4. SQLが文字列に対して長すぎます