MySQL在哪里包含最后一个字符%

问题描述 投票:1回答:1

我使用此功能排除了插入同名新税的可能性:

function check_name_free($id, $name) {

if ( $id == "" ) {

    // NEW INSERT

    $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 {

    //MODIFY ACTUAL RECORD

    $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 false;

return true;

}

但是,在我的表单上,我将修改($_POST['action'] == "edit")一个名为last char%的现有条目,例如TAX 20%,我的脚本返回false

table tax内的实际记录:

名称:税率10%

名称:税率20%

名称:税率21%

我的index.php

if ( isset($_POST['action']) && $_POST['action'] == "edit" ) {
   $id = $_POST['id'];
   $name = $_POST['name'];

   $free = check_name_free($id, $name);

   if ( !$free ) {
     echo "Name already in use";
     exit();
   }

 // continue edit
}

如何修改LIKE ?以在最后一个char上使用%接受正确的$ string?

php mysql
1个回答
0
投票

期待mysql doc https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html

你可以使用%逃脱\%

  SELECT 'David%' LIKE 'David\%';

或使用正则表达式

 select 'mystring%' regexp('%');

在你的情况下

SELECT Name FROM tax WHERE Name like ('%21\%')  

要么

 SELECT Name FROM tax WHERE Name regexp('21%') 
© www.soinside.com 2019 - 2024. All rights reserved.