我是sql的初学者,但我相信这应该有用。我正在一步一步地这样做,所以这不是完整的代码,但我遇到了问题。基本上我要做的是使用从表单创建的数组:
<form action="search.php" method="post">
<input type="checkbox" name="features[]" value="Texture" >Textures<br />
<input type="checkbox" name="features[]" value="Items" >Items<br />
<input type="checkbox" name="features[]" value="GUI" >Gui<br />
</form
创建最终成为我的数据库查询的内容。这是PHP代码:
<?php
$button = $_POST['submit'];
$features = $_POST['features'];
if ($button){
//connect
mysql_connect("server","username","password");
mysql_select_db("rdm");
foreach ($features){
$x++;
if ($x=1)
$construct .= "feature LIKE '$features[$x]'";
else
$construct .= " OR feature LIKE '$features[$x]'";
}
$construct = "SELECT * FROM Textures WHERE '$construct';
echo $construct;
?>
我的理解是这应该回显变量$ construct,它将包含文本“SELECT * FROM Textures WHERE feature LIKE ...然后是features数组中的第一个值,后跟其他值。
任何帮助,为什么这不起作用将是太棒了!正如我所说的那样,如果这是一个愚蠢的错误,我很陌生。
提前致谢!
答案 0 :(得分:3)
您的查询字符串将生成错误:
if ($x=1)
这不是比较,它将x设置为1,因此您的查询中没有“OR”条件。生成查询的更好方法是:
$query_conditions = array()
foreach($_POST['features'] as $feature) {
$query_conditions[] = "'" . mysql_real_escape_string($feature) . "'"
}
$where_in_clause = implode(',', $query_conditions);
$query = "SELECT * FROM Textures WHERE feature IN ($where_in_clause)";
答案 1 :(得分:0)
试试这个:
// implode the features array into a string, adding quotes
$featuresString = "'".implode("','", $features)."'";
// build the query
$construct = "SELECT * FROM Textures WHERE feature IN (".$featuresString.")";
答案 2 :(得分:0)
你有几个语法错误。值得注意的是,带有SQL的行不会关闭双引号或在行尾使用分号。 if
区块末尾还有一个缺少的括号。
此代码将完成上述任务:
$button = isset($_POST['submit']) ? true : false;
$features = isset($_POST['features']) ? $_POST['features'] : false;
if ($button && is_array($features)) {
$construct = 'SELECT * FROM Textures WHERE feature IN ("'.implode('","', $features ).'")';
echo $construct;
}