传递值数组从形式到SQL查询WHERE IN子句
我有一个具有大量的复选框,这是从唯一值在MySQL表中生成的一种形式:传递值数组从形式到SQL查询WHERE IN子句
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<?php
$query5="SELECT distinct from_user from tracks WHERE uploaded_page='$this_path_short' ORDER BY from_user";
$result5=mysql_query($query5) or die(mysql_error());
while ($row = mysql_fetch_array($result5)) {
$from_user = $row['from_user'];
echo "<input type=\"checkbox\" name=\"from_user[]\" value=\"AND ".$from_user."\" checked=\"checked\">".$from_user."<br>";
}
?>
<input type="submit" name="submit" value="filter"><br>
我将随后要通过'from_user'值的数组到另一个MySQL页面上的查询。我能得到的值是这样的:
$names=implode(" ", $_POST['from_user']);
但我不知道如何将这个数组在下面的MySQL查询:
$query1="SELECT * FROM tracks WHERE from_user IN **array goes here**)";
$query1='SELECT * FROM tracks WHERE from_user IN ('.implode(',',$_POST['from_user']).')';
取出AND
所以该复选框值的样子此:
echo "<input type=\"checkbox\" name=\"from_user[]\" value=\"".$from_user."\" checked=\"checked\">".$from_user."<br>";
}
IN
预计逗号分隔值:
$names=implode(",", $_POST['from_user']);
$query1="SELECT * FROM tracks WHERE from_user IN (".$names."))";
!!!!但是:请,请,请用准备好的语句,因为你的代码是SQL注入敞开:的 http://php.net/manual/de/mysqli.prepare.php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$result = null;
$names = implode(",", $_POST['from_user']);
/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT * FROM tracks WHERE from_user IN (?)")) {
/* bind parameters for markers */
$stmt->bind_param("s", $names);
/* execute query */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($result);
/* fetch value */
$stmt->fetch();
print_r($result);
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
谢谢,并感谢准备好的陈述信息。我已经添加了你的代码(即删除AND,在implode上添加逗号,并且改变查询,但是我得到了implode的以下错误:'[11-Aug-2012 11:44:22] PHP Warning: implode()[function.implode]:在第136行****中传递的参数无效 – Nick 2012-08-11 11:48:45
看来,尽管有这个警告,$ name被设置为OK,但由于某种原因,页面正在破坏一个白色的屏幕)当我提交的表单运行查询与$ name在 – Nick 2012-08-11 12:06:28
我已经得到了这个工作现在使用'$ names =“\”“。implode('','',$ _POST ['from_user']) 。“\”“;'和'$ query1 =”选择*从跟踪WHERE from_user IN($ names)“;'看来我需要将每个$ _POST ['from_user']值包含在引号中,在我的MySQL表中检查是字符串。我仍然在implode行上得到PHP警告 - 我不知道为什么这样,但我有它的工作。我应该标记你的答案是答案,因为它是,或者您是否想根据评论中的信息进行调整? – Nick 2012-08-11 13:53:36
可能重复[使用IN指令用事先准备好的声明中搜索(HTTP://计算器.com/questions/9006066/use-the-in-directive-to-search-with-a-prepared-statement) – Gordon 2012-08-11 11:28:14
[PDO with where in queries]的可能重复(http://stackoverflow.com/questions/2373562/pdo-with-where-in-queries) – Gordon 2012-08-11 11:28:51
[MySQL Prepared statement with a variable size variable list]可能的重复(http://stackoverflow.com/questions/327274/mysql-prepared-statements-with-a-variable -size-variable-list) – Gordon 2012-08-11 11:29:15