如何在php中使用“IN”子句构建mysql查询

时间:2012-09-10 16:21:45

标签: php mysql

我正在编写一个搜索表单,将人们的名字存储在一个数组中,然后想在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子句。

3 个答案:

答案 0 :(得分:1)

是的,那怎么用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']));

答案 1 :(得分:0)

您可以使用

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

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

答案 2 :(得分:0)

以下是阻止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']);