[英]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.