MySQL在搜索过程中排除百分号-可重用脚本

时间:2019-04-10 15:58:21

标签: php mysql sql mysqli sql-like

我有一个增值税表,在大多数情况下,增值税名称的末尾都有百分号,例如:

------------------------------------------
ID  |  Name                |   Value     |
------------------------------------------
 1  |  VAT 22%             |     22      |
 2  |  VAT 10%             |     10      |
 3  |  VAT 23%             |     23      |
 4  |  VAT 10% IND-50%     |     10      |
------------------------------------------

我有一个函数,如果在新插入(或修改行)期间已经使用了名称,则返回true:

function check_name_exist($id, $name) {

    if ( $id == "" ) {

        $sql = "SELECT Name FROM tax WHERE Name LIKE ?";
        try {
            $rs = $db->prepare($sql);
            $rs->execute(array($name));
            $ris = $rs->fetchAll(PDO::FETCH_ASSOC);
        } catch(PDOException $e) {
            die($e);
        }
    } else {

        $sql = "SELECT Name FROM tax WHERE Name LIKE ? AND ID <> ?";
        try {
            $rs = $db->prepare($sql);
            $rs->execute(array($name, $id));
            $ris = $rs->fetchAll(PDO::FETCH_ASSOC);
        } catch(PDOException $e) {
            die($e);
        }
    }

    if ( count($ris) > 0 )
        return true;

    return false;

}

当我尝试修改ID = 2时出现问题。它告诉我已经有一行,含“增值税10%”。在这种情况下,行ID = 4。

但这是一个错误。

如何修改脚本以操纵以char而不是通配符传递的百分号? (我还需要为通用名称中没有百分号的情况创建通用函数)

1 个答案:

答案 0 :(得分:0)

您可以尝试使用\%

来转义字符串中的%。
 select Name  from tax  where 'VAT 22% ..' like 'VAT 22\%%';;