繁体   English   中英

如何在PHP中使用“ IN”子句构建MySQL查询

[英]How to build a mysql query in php that uses an “IN” clause

我当时正在研究一种将人们的姓名存储在一个数组中的搜索表单,然后想要在PHP的结果页上使用IN子句创建查询(如果那是最好的方法;请随时向我指出另一个方向)。 基本上,页面上所有名称都有复选框,因此它们可以检查一个,多个或所有名称。 我尝试使用implode函数,但到目前为止仍未成功。

$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 Injections

对于您的评论:

在爆破之前,您需要使用mysql_real_escape_string。 因此,您的代码应为:

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

您可以使用

SELECT * FROM talent_eas WHERE Your_name IN('shail','jyoti');

我建议您阅读Mysql Injection,否则您的代码很容易被黑

这是防止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']);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM