PHP根据第n个字母检索MySQL结果

时间:2015-10-01 17:16:50

标签: php mysql

我试图根据已知的一些字母从数据库中检索一些结果。

这是我的PHP脚本:

$sql = "SELECT * FROM lexem WHERE charLength = '$total'";
$doh = "__a_d";
$sql .= " AND formUtf8General LIKE '$doh'";

长度,字母,字母数字和字母位置是可变的。 我的脚本只返回包含我的一些或一个字母的结果。我该如何改进呢?

1 个答案:

答案 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注入),您必须在运行此类查询之前转义所有查询参数。

其他信息:How can I prevent SQL injection in PHP?