Php 基于用户输入的第一个字符返回PDO查询

Php 基于用户输入的第一个字符返回PDO查询,php,mysql,pdo,Php,Mysql,Pdo,我正在使用PHP和PDO构建一个CRUD应用程序 我有一个包含各种食物的表格,希望根据用户输入的第一个字母返回结果。如“退回所有以“a”开头的食物” 我有一个疑问: $sql = "SELECT * FROM food WHERE FoodName LIKE 'a%'; $userInput = $_POST['userInput']; 这显然有效,并返回所有以a开头的食物 但是我怎样才能根据用户输入进行

我正在使用PHP和PDO构建一个CRUD应用程序

我有一个包含各种食物的表格,希望根据用户输入的第一个字母返回结果。如“退回所有以“a”开头的食物”

我有一个疑问:

$sql = "SELECT * 
                    FROM food
                    WHERE FoodName LIKE 'a%';
    $userInput = $_POST['userInput'];
这显然有效,并返回所有以a开头的食物

但是我怎样才能根据用户输入进行查询,而不是为每个字母写上面的内容呢


我不能发布整个应用程序,我在本地主机上有它,但我认为这不是必要的。实现这一点最有效的方法是什么?JS、PHP或PDO命令?

根据您所拥有的内容,有一个表单提交用户输入,它会在
$\u POST
数组中产生一个变量:

$_POST['userInput']
为了在查询中使用它,您只需将搜索词替换为posted变量。以下是PDO中的一个示例,它使用一条准备好的语句来防止潜在的SQL注入攻击:

$sql = $conn->prepare("SELECT * FROM `food` WHERE `FoodName` LIKE :user_input"); // $conn being the database connection
$parameters = array(':user_input' => $_POST['userInput'] . '%'); // note that I have concatenated the wildcard here
$sql->execute($parameters); 
$results = $sql->fetchAll(PDO::FETCH_ASSOC); // fetch everything into an associative array

在这里,我已经执行了一个参数数组,您还可以使用
bindParam()

单独绑定每个参数(如果您有多个参数),根据您所拥有的内容,有一个表单提交用户输入,它会在
$\u POST
数组中产生一个变量:

$_POST['userInput']
为了在查询中使用它,您只需将搜索词替换为posted变量。以下是PDO中的一个示例,它使用一条准备好的语句来防止潜在的SQL注入攻击:

$sql = $conn->prepare("SELECT * FROM `food` WHERE `FoodName` LIKE :user_input"); // $conn being the database connection
$parameters = array(':user_input' => $_POST['userInput'] . '%'); // note that I have concatenated the wildcard here
$sql->execute($parameters); 
$results = $sql->fetchAll(PDO::FETCH_ASSOC); // fetch everything into an associative array

这里我执行了一个参数数组,您还可以使用
bindParam()

单独绑定每个参数(如果您有多个参数),这可能有助于您的查询缺少结束双引号;这是一个糟糕的粘贴吗?@Fred ii-,它不是整个函数,只是为了简洁起见try/catch位的一部分;这是一个糟糕的粘贴吗?@Fred ii-,它不是整个函数,只是为了简洁起见try/catch位的一部分。非常感谢,所以这个通配符就是所有需要的,需要像那样连接起来吗?非常棒的东西。如果你期待查询的第一个字母,那么这是正确的。如果你想让你的
LIKE
更加包容,那么通配符也应该连接到变量的from。有没有一种方法不仅可以识别第一个用户字符输入,而且可以识别每个连续的字符输入?抱歉,如果这听起来像一个愚蠢的问题,我是SQL的新手(有史以来的第一个db项目),并且意识到即使是“regex”也是完全不同的。在JS中实现这一点的方法对我来说很清楚,我只是想知道一位专家会如何使用DBO/SQL。感谢这些非常有价值的初始课程。有,通配符将保留在原位,您将允许更长的用户输入。非常感谢,所以这个通配符就是所有需要的,并且需要像那样连接起来?非常棒的东西。如果你期待查询的第一个字母,那么这是正确的。如果你想让你的
LIKE
更加包容,那么通配符也应该连接到变量的from。有没有一种方法不仅可以识别第一个用户字符输入,而且可以识别每个连续的字符输入?抱歉,如果这听起来像一个愚蠢的问题,我是SQL的新手(有史以来的第一个db项目),并且意识到即使是“regex”也是完全不同的。在JS中实现这一点的方法对我来说很清楚,我只是想知道一位专家会如何使用DBO/SQL。感谢这些非常有价值的初级课程。有一点是,通配符将保持不变,您将允许更长的用户输入。