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 hintID!=[number]
比较慢最好使用(ID<[number]和ID>[number])
,因为它会触发索引范围扫描。好的,谢谢。但对于一个通用功能,它仍然在工作吗?例如,如果我插入一个Name=“TAX 21%”仍然需要使用regexp(“TAX 21%”)?您的评论不清楚。。你什么意思。您的问题是关于使用%作为costant。。我的回答(我认为)清楚地回答了你的问题。。在转义序列中使用regexp..等是为了一般pourpose。。
SELECT Name FROM tax WHERE Name regexp('21%')