我使用此
获取数组的结果$arrayResults = $_GET;
$arr = $arrayResults;
然后使用它来获取变量:
foreach ($arr['seller'] as $seller) {
echo $seller;
}
哪个输出值1值2值3 但是当我把它放入MySQL查询时它不起作用所以我需要把它们变成一个字符串并且理想情况下有这样的东西 - "值1"或"值2"或"值3"
这是我使用
的查询$sql_select = "SELECT * ";
$sql_from = "from feeds,product_categories_map where feeds.seller =".dbstr( $seller )." and feeds.enabled=1 and feeds.stock=1 and feeds.deleted=0 and feeds.best_seller=1 and product_id=product_feed_id and product_feed_id!=1 ";
$sql_orderby = " ORDER BY rand()";
$sql_limit = " LIMIT 20";
$query=$sql_select . $sql_from . $sql_group . $sql_orderby . $sql_limit;
$product_results=dbselect( $query,"dbLinkInt" );
我不知道我在哪里出错了。
答案 0 :(得分:2)
假设您清理了您的输入,您应该以这种方式格式化您的变量
$seller = implode("','", $arrayResults); //this format the array into comma separated string
然后将您的查询更改为:
$sql_from = "from feeds,product_categories_map where feeds.seller IN ('".$seller."') and feeds.enabled=1 and feeds.stock=1 and feeds.deleted=0 and feeds.best_seller=1 and product_id=product_feed_id and product_feed_id!=1 ";
答案 1 :(得分:1)
您的问题似乎由两部分组成,并引发第三个问题:
<强> 1。将多个数组元素连接成一个字符串
PHP的implode函数允许使用给定的字符串连接给定数组的元素。
例如:
$seller = array('value 1', 'value 2', 'value 3');
$seller_joined = "\"" . implode("\" OR \"", $seller) . "\"";
echo $seller_joined ;
应该回应:
"value 1" OR "value 2" OR "value 3"
<强> 2。编写一个SQL WHERE子句,用于检查某个属性是否等于一组某个值
如果要检查某个属性是否等于多个可能值之一,则应使用SQL IN运算符,并用逗号而不是关键字OR分隔值,例如:
$seller_joined = "\"" . implode("\", \"", $seller) . "\"";
$sql_from = "from feeds,product_categories_map where feeds.seller IN (". $seller_joined .") and feeds.enabled=1 and feeds.stock=1 and feeds.deleted=0 and feeds.best_seller=1 and product_id=product_feed_id and product_feed_id!=1 ";
第3。消除对数据库的输入
根据以下答案的建议,您应该在将sanitize your strings传递给数据库之前确保SQL injection,以防止querySelectorAll
。
答案 2 :(得分:1)
$sql_select = "SELECT * ";
$sql_from = "from feeds,product_categories_map where feeds.seller =".dbstr( $seller )." and feeds.enabled=1 and feeds.stock=1 and feeds.deleted=0 and feeds.best_seller=1 and product_id=product_feed_id and product_feed_id!=1 ";
$sql_orderby = " ORDER BY rand()";
$sql_limit = " LIMIT 20";
$query = "SELECT * from feeds,product_categories_map where feeds.seller=%s and feeds.enabled=1 and feeds.stock=1 and feeds.deleted=0 and feeds.best_seller=1 and product_id=product_feed_id and product_feed_id!=1 ORDER BY rand()";
$query = sprintf($query, mysql_real_escape_string(dbstr($seller)) );
请使用sprintf方法和mysql_real_escape_string。 sprintf本身不会保护你。 您也可以看一下OO设计。
一切顺利