如何在PHP中查询数据库并根据匹配的用户输入返回结果?

如何在PHP中查询数据库并根据匹配的用户输入返回结果?,php,mysql,mysqli,user-input,Php,Mysql,Mysqli,User Input,我正试图用MySQLi编写一个PHP脚本来查询数据库 我希望可以对照数据库检查用户输入,然后如果“normal_verbs”表的“root”列中的字符串在输入中,则返回“conjugation”列的结果 因此,如果用户输入类似于“foobar”,并且根列有“foo”,我希望它在“foobar”中看到“foo”,并在该行中返回“conjugation”的值 我似乎无法使查询按我所希望的方式工作。我在下面使用的这个基本上只是一个占位符。我不完全明白为什么它不起作用 我想说的是: fu

我正试图用MySQLi编写一个PHP脚本来查询数据库

我希望可以对照数据库检查用户输入,然后如果“normal_verbs”表的“root”列中的字符串在输入中,则返回“conjugation”列的结果

因此,如果用户输入类似于“foobar”,并且根列有“foo”,我希望它在“foobar”中看到“foo”,并在该行中返回“conjugation”的值

我似乎无法使查询按我所希望的方式工作。我在下面使用的这个基本上只是一个占位符。我不完全明白为什么它不起作用

我想说的是:

        function db_connect() {

            static $connection;

            if(!isset($connection)) {
                $connection = mysqli_connect('localhost','user','password','Verb_Bank');
            }

            if($connection === false) {
                return mysqli_connect_error(); 
            }
            return $connection;
        }

        function db_query($query) {
            $connection = db_connect();
            $result = mysqli_query($connection,$query);

            return $result;
        } 

        function db_quote($value) {
                $connection = db_connect();
                return "'" . mysqli_real_escape_string($connection,$value) . "'";
            }    
$m= db_query("SELECT `conjugation` from normal_verbs where `root` in (" . $y . ")");
    if($m === false) {
        // Handle failure - log the error, notify administrator, etc.
    } else {
        // Fetch all the rows in an array
        $rows = array();
        while ($row = mysqli_fetch_assoc($m)) {
            $rows[] = $row;
        }
    }
    print_r ($rows);
它没有给我任何错误,所以我认为它正在连接到数据库

我错了。由于对MySQLi的误解,我遗漏了一些明显的内容,并相应地编辑了代码。因此,上面的代码确实可以工作,因为它连接到数据库并返回一个结果,但我仍然无法找到一个可行的SQL语句来执行我希望它执行的操作。

请尝试以下操作:

SELECT 'conjugation' FROM 'normal_verbs' WHERE " . $y . " LIKE CONCAT('%',root,'%')
它选择根包含$y的所有行


此外,您的代码容易受到SQL注入的攻击。请查看更多信息。

尝试以下SQL查询

SELECT `conjugation` from normal_verbs where `root` like '%$y%'

如果那些卷曲的引号在那里,你会得到语法错误,它们在日志中。在打开的
Learn about语句之后立即将错误报告添加到文件顶部。您是否尝试过在没有where的情况下运行查询?我建议从“正常动词”限制1中选择“变位”。假设您的数据库中有数据,这将告诉您是否正在连接到实际的数据库。@JayBlanchard是的,但在某些情况下,根据主机设置,您无法这样做。当然,程序员应该有权访问它,但仍然…您正在使用表名和列名的引号,请切换到反勾号。db_查询在哪里定义?谢谢。这会选择
root
表的子字符串为$y而不是整个$y的所有行吗?是的,它会选择root包含在$y中的所有行。如果你只想要一个结果,你可以通过一些参数对它们进行排序,并将它们限制为一个。好吧,这或多或少对我有用,只是我不得不将“+$y+”改为(“.$y”)。使用“+$y+”根本没有任何作用。我很想知道为什么,但我很高兴它能奏效。非常感谢。这是我的错误,在PHP中,使用。与许多其他语言(如java)不同的是,它给了我一个奇怪的错误,告诉我print_r语句中的变量现在未定义。我把它放在$m=db_查询中(“从普通动词中选择
conjugation
,其中
root
类似“%$y%”);我是不是漏掉了一些标点符号?试着解决这个问题