我使用此功能排除了插入同名新税的可能性:
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?
期待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%')