如何在php中构建一个使用“;IN”;条款


How to build a mysql query in php that uses an "IN" clause

我正在开发一个将人名存储在数组中的搜索表单,然后想用PHP在结果页面上创建一个使用in子句的查询(如果这是最好的方法,请随时为我指明另一个方向)。基本上,页面上有所有名称的复选框,因此他们可以选中一个、多个或所有名称。我尝试过使用内爆函数,但到目前为止都没有成功。

$yourName = implode("', '", $_POST['Your_name']);
if($dutyReq=="All" && $yourName!="All" ) $query="SELECT * FROM talent_eas WHERE Your_name IN ('$yourName')";

看起来还好吗?这能处理所有情况吗?我刚开始使用PHP,所以我不知道自己在做什么。我试着搜索我的具体问题,但似乎没有发现IN子句有多大用处。

是的,那就是如何使用IN。下面是一些更多的例子:

SELECT * FROM users WHERE name IN ('John','Jane');
SELECT * FROM some_table WHERE the_month IN ('January','April','September');

另外,请阅读SQL注入。

请发表评论:

您需要在内爆之前使用mysql_real_sescape_string。所以你的代码应该是:

$yourName = implode("', '", mysql_real_escape_string($_POST['Your_name']));

您可以使用

选择*FROM talent_eas WHERE Your_name IN('mail','jyoti');

我建议你阅读Mysql注入,否则你的代码很容易被黑客入侵

以下是防止SQLi 的几种方法

# 1. Map each name with escape function
$yourname = implode("', '", array_map('mysql_real_escape_string', $_POST['Your_name']));
# 2. Use PDO with prepare statement (with placeholders e.g. (?, ?, ?)
$placeholders = array_fill(0, sizeof($_POST['Your_name']), '?');
$stmt         = $pdo->prepare('SELECT * FROM talent_eas WHERE Your_name IN ('.implode(', ', $placeholders).')';
$stmt->execute($_POST['Your_name']);