<分区>
我正在尝试根据已知的一些字母从数据库中检索一些结果。
这是我的 PHP 脚本:
$sql = "SELECT * FROM lexem WHERE charLength = '$total'";
$doh = "__a_d";
$sql .= " AND formUtf8General LIKE '$doh'";
长度、字母、字母数量和字母位置是可变的。 我的脚本只返回包含我的部分或其中一封信件的结果。我该如何改进它?
<分区>
我正在尝试根据已知的一些字母从数据库中检索一些结果。
这是我的 PHP 脚本:
$sql = "SELECT * FROM lexem WHERE charLength = '$total'";
$doh = "__a_d";
$sql .= " AND formUtf8General LIKE '$doh'";
长度、字母、字母数量和字母位置是可变的。 我的脚本只返回包含我的部分或其中一封信件的结果。我该如何改进它?
最佳答案
希望我理解正确。我真的希望你尝试下面的代码。它使用一个包含字母及其在 SQL 参数中的位置的数组。
$filter_string = '';
$offset = 0;
$total = 10; //or any other number
$escaped_characters = array('_', '%'); //Any other MySQL special characters
$filters = array(
3=>'a', 5=>'d', 9=>'%', 11=>'r', 0=>'n', 2=>'k', 1=>'w', -1=>'t',
);
ksort($filters);
foreach($filters as $key => $value) {
if ($key < 1 || strlen($value) != 1) {
continue;
}
for($i = 1; $i < ($key - $offset); $i++) {
$filter_string .= '_';
}
if (in_array($value, $escaped_characters)) {
$filter_string .= '\\'.$value;
} else {
$filter_string .= $value;
}
$offset = $key;
}
//Code that escapes parameters in query
$sql = "SELECT * FROM lexem WHERE charLength = '$total' AND formUtf8General LIKE '$filter_string%';";
$filters 数组是一个以键=>值格式(每次一个字符)具有字符位置的数组。我们需要按键对其进行排序,以便每次在 foreach 循环中 offset 变量都会采用正确的值。如果您需要的字符也是 MySQL 特殊字符,则 $escaped_characters 数组很有用。
重要提示:出于安全原因(SQL 注入(inject)),您必须在运行此类查询之前转义所有查询参数。
关于PHP 根据第 n 个字母检索 MySQL 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32893234/