【问题标题】:How to change mysql statement depending on how many variables with php如何根据php的变量数量更改mysql语句
【发布时间】:2012-03-30 08:02:57
【问题描述】:

所以基本上我的网站上有可以检查的城市名称。我用一个键将它们保存到本地存储中。然后我通过 Ajax 将它们发送到下面的 php 脚本。然后在 php 中,我将 city 变量分解为“,”,然后根据给出的城市过滤城市。但现在我只知道如何手动执行此操作,例如 city[0]、city[1] 等。有没有办法可以根据有多少变量不断地将这些变量放入 mysql 语句中?如果我感到困惑,我很抱歉,我完全迷路了。任何帮助,将不胜感激。

这是我的代码:

<?php
$con = mysql_connect("localhost", "test", "test") or die('could not connect to mysql');

mysql_select_db("test", $con) or die('could not find database');


$city2 = $_POST['city2'];

$cities = explode(",", $city2);

$rep2 = $_POST['rep2'];

$status2 = $_POST['status2'];

$size2 = $_POST['size2'];

$type2 = $_POST['type2'];

$lat2 = $_POST['lat2'];

$long2 = $_POST['long2'];

$radius2 = $_POST['radius2'];

if ($city2 == '') {
    $city_stat = " city RLIKE '.*' ";
} else {
    $city_stat = " (city='$cities[0]' OR city='$cities[1]') ";

}


if ($radius2 == '') {
    $radius_stat = '10';
} else {
    $radius_stat = $_POST['radius2'];

}


if ($size2 == '') {
    $size_stat = '';
} else {
    $size_stat = " AND size='$size2' ";

}

if ($rep2 == '') {
    $rep_stat = '';
} else {
    $rep_stat = " AND rep='$rep2' ";

}


if ($status2 == '') {
    $status_stat = '';
} else {
    $status_stat = " AND status='$status2' ";

}



$result = mysql_query("SELECT lat,lng,id,rep,rep_num,name,city,state,zip,address,status,category,size FROM test WHERE $city_stat $rep_stat $size_stat $status_stat LIMIT 0 , 50 ");

while ($array = mysql_fetch_assoc($result)) {
    $array_json[] = $array;




}


echo json_encode($array_json);
?>

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    我认为您要问的是,可能有多个城市,您想设置一个条件,即城市可以是其中的任何一个。

    所以而不是:

    $city_stat = " (city='$cities[0]' OR city='$cities[1]') ";
    

    你可以这样做:

    $city_stat = '(city IN ('.implode(',',$cities).'))';
    

    【讨论】:

    • 当我尝试这个时,它没有返回任何结果,这是运行 SELECT lat,lng,id,rep,rep_num,name,city,state,zip,address,status,category,size 的 mysql 查询FROM hospital WHERE (city IN (Abington)) LIMIT 0 , 50 null
    • 这是因为城市名称是一个字符串,但它周围没有引号。为了解决这个问题,我们需要确保城市数组中的每个城市的名称都有引号。我们可以这样做: $city_list = implode(',',$cities); $city_string = "'" 。 str_replace(",", "','", $cities) 。 "'"; $city_stat = '(city IN ('.$city_string.'))';
    • 好的,所以我试过了,这就是我的 sql 查询结果为 SELECT lat,lng,id,rep,rep_num,name,city,state,zip,address,status,category,size FROM医院 WHERE (city IN ('Array')) LIMIT 0 , 50 null
    • 糟糕,替换 $city_string = "'" 。 str_replace(",", "','", $cities) 。 "'";与 $city_string = "'" 。 str_replace(",", "','", $city_list) 。 "'";
    猜你喜欢
    • 2023-03-11
    • 2021-04-11
    • 2019-04-01
    • 2017-09-06
    • 2011-10-29
    • 2022-01-02
    相关资源
    最近更新 更多