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

标签 php mysql

<分区>

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

这是我的 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)),您必须在运行此类查询之前转义所有查询参数。

附加信息:How can I prevent SQL injection in PHP?

关于PHP 根据第 n 个字母检索 MySQL 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32893234/

相关文章:

php - 清理所有已发布字段的正确方法?

php - laravel-5.2 分页不起作用 - 未定义方法 stdClass::links() 错误

java - 将Java连接到MySQL数据库

mysql - MariaDB 语法错误

php - 如果不匹配,Mysql Count 返回零

mysql - 在 Linux 上使用 C 连接到 lampp mysql 数据库

php - CakePHP 在保存到数据库之前更改数据

PHP 解析目录和子目录的文件路径和仅 jpg 图片类型的名称

php - json 到 mysql 只插入最后一条记录

php - 返回 php 文件中图像的内容?