Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL,其中LIKE在最后一个字符中包含%_Php_Mysql - Fatal编程技术网

Php MySQL,其中LIKE在最后一个字符中包含%

Php MySQL,其中LIKE在最后一个字符中包含%,php,mysql,Php,Mysql,我使用此功能排除插入同名新税的可能性: 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

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

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;

}
但是,当我在表单上修改(
$\u POST['action']==“edit”
)一个名为last char%的现有条目时,例如
TAX 20%
,我的脚本返回
false

税表内的实际记录:

名称:税10%

名称:税20%

名称:税21%

my 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?
以接受正确的$string,并在最后一个字符上添加
%

查看mysql文档

您可以使用
\%
转义
\%

  SELECT 'David%' LIKE 'David\%';
或者使用regexp

 select 'mystring%' regexp('%');
就你而言

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


不要将
%
TAX
之类的内容存储在数据库的colunn中。数据库需要的是一个列,其中包含
20
,以便您可以在计算中使用它。如果您想向用户显示税率,则在演示层中添加
%
和“tax”您可以通过执行
类似的“tax 21%%”来逃避类似的
%
,但您不应该这样做。在这种情况下,我需要在我的条目中包含%。当我使用LIKE的时候,什么样的公式可以去掉%(在最后的位置上)?我刚刚给你展示了!在注释2little hint
ID!=[number]
比较慢最好使用
(ID<[number]和ID>[number])
,因为它会触发索引范围扫描。好的,谢谢。但对于一个通用功能,它仍然在工作吗?例如,如果我插入一个Name=“TAX 21%”仍然需要使用regexp(“TAX 21%”)?您的评论不清楚。。你什么意思。您的问题是关于使用%作为costant。。我的回答(我认为)清楚地回答了你的问题。。在转义序列中使用regexp..等是为了一般pourpose。。
 SELECT Name FROM tax WHERE Name regexp('21%')