我试图根据已知的一些字母从数据库中检索一些结果。
这是我的PHP脚本:
$sql = "SELECT * FROM lexem WHERE charLength = '$total'";
$doh = "__a_d";
$sql .= " AND formUtf8General LIKE '$doh'";
长度,字母,字母数字和字母位置是可变的。 我的脚本只返回包含我的一些或一个字母的结果。我该如何改进呢?
答案 0 :(得分:1)
我希望我理解正确。我真的希望你尝试下面的代码。它使用一个包含字母及其在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数组是一个具有key =&gt;中字符位置的数组。值格式(每次一个字符)。我们需要按键对它进行排序,这样offset变量每次都会在foreach循环中取正确的值。如果您需要也是MySQL特殊字符的字符,那么$ escaped_characters数组很有用。
重要说明:由于安全原因(SQL注入),您必须在运行此类查询之前转义所有查询参数。