我正在开发一个将人名存储在数组中的搜索表单,然后想用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']);