我使用此功能排除了以相同名称插入新税的可能性:
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 ?
在上一个字符上接受%
的正确$字符串?
寻找mysql doc https://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html
您可以使用%
%
SELECT 'David%' LIKE 'David%';
或使用regexp
select 'mystring%' regexp('%');
在您的情况下
SELECT Name FROM tax WHERE Name like ('%21%')
或
SELECT Name FROM tax WHERE Name regexp('21%')