Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将多个GET参数合并到一个准备好的语句中_Php_Mysql_Rest - Fatal编程技术网

Php 如何将多个GET参数合并到一个准备好的语句中

Php 如何将多个GET参数合并到一个准备好的语句中,php,mysql,rest,Php,Mysql,Rest,我正在使用地理定位应用程序,希望根据用户的标签返回radius结果 $tags = preg_replace('/\s+/', '', $tags); $tags_list = []; $tags_list = explode(',', $tags); $tags = implode(" OR c.title=", $tags_list); echo $tags; if( !empty($latitude) && !empty($longtitude) && !e

我正在使用地理定位应用程序,希望根据用户的标签返回radius结果

$tags = preg_replace('/\s+/', '', $tags);
$tags_list = [];
$tags_list = explode(',', $tags);
$tags = implode(" OR c.title=", $tags_list);
echo $tags;
if(
!empty($latitude) &&
!empty($longtitude) &&
!empty($radius)
){

    $qry = "SELECT o.id, o.title, o.icon, o.description,
    (
        6371 * acos
        (
            cos(
                radians( :lat )
            )
            * cos(
                radians( lat)
            ) * cos(
                radians( lng) - radians( :lng )
            ) + sin(
                radians( :lat )
            ) * sin(
                radians( lat)
            )
            )
            ) AS distance
            FROM objects o, category_object co, category c
            WHERE o.id = co.id_object AND co.id_category = c.id AND c.title=:title
            HAVING distance/1000 <= :radius
            ORDER BY distance/1000 ASC;";

    $stmt = $db->prepare($qry);

    $stmt->bindParam(":lat", $latitude);
    $stmt->bindParam(":lng", $longtitude);
    //Here
    $stmt->bindParam(":title", $tags);
    $stmt->bindParam(":radius", $radius);

    if($stmt->execute()){
        while ($result = $stmt->fetch(PDO::FETCH_OBJ)) {
            echo json_encode(array("type" => "FeatureCollection",
                "features" => array(
                    "type" => "Feature",
                    "geometry" => array("type" => "Point",
                        "coordinates" => [$latitude, $longtitude]),
                    "properties" => array(
                        "ID" => $result->id,
                        "icon" => $result->icon,
                        "tags" => "",
                        "title" => $result->title,
                        "description" => $result->description))), JSON_UNESCAPED_SLASHES);
            echo "\n\n";
        }

    }
$tags=preg_replace('/\s+/','.$tags);
$tags_list=[];
$tags_list=分解(“,”,$tags);
$tags=内爆(“或c.title=”,$tags\u列表);
echo$标签;
如果(
!空($latitude)&&
!空($longtudity)&&
!空($radius)
){
$qry=“选择o.id、o.title、o.icon、o.description、,
(
6371*acos
(
因为(
弧度(:lat)
)
*因为(
弧度(纬度)
)*cos(
弧度(lng)-弧度(:lng)
)+罪(
弧度(:lat)
)*罪(
弧度(纬度)
)
)
)作为距离
来自对象o、类别\对象co、类别c
其中o.id=co.id\u对象和co.id\u类别=c.id和c.title=:title
距离/1000的问题在于:

$tags = implode(" OR c.title=", $tags_list);
您需要在SQL中使用where子句:

AND (c.title = 'mexican' OR c.title = 'restaurants')
如果你想绑定参数,你必须做更多的工作。
比如:

您可以使用以下代码指定值:

$title_1 = $tags_list[0];
$title_2 = $tags_list[1];

$stmt->bindParam(':title_1', $title_1);
$stmt->bindParam(':title_2', $title_2);
问题在于:

$tags = implode(" OR c.title=", $tags_list);
您需要在SQL中使用where子句:

AND (c.title = 'mexican' OR c.title = 'restaurants')
如果你想绑定参数,你必须做更多的工作。
比如:

您可以使用以下代码指定值:

$title_1 = $tags_list[0];
$title_2 = $tags_list[1];

$stmt->bindParam(':title_1', $title_1);
$stmt->bindParam(':title_2', $title_2);

这不应该是一个数据库连接问题,因为第一个查询工作得很好,识别了代码,并认为这与上次添加的问题相同。不过,我认为bindParam破坏了我的内爆()方法您的代码将生成类似于
的sql,其中o.id=co.id\u object和co.id\u category=c.id和c.title='mexican或c.title=restaurant'
这是不合法的sql这是我认为的谢谢!太简单了:DIt不应该是数据库连接问题,因为第一个查询工作得很好,所以识别代码并思考这和上次添加的问题是一样的,不过,我认为bindParam破坏了我的内爆()方法您的代码将生成sql,如
o.id=co.id\u object和co.id\u category=c.id和c.title='mexican或c.title=restaurant'
这是不合法的sql这是我认为的谢谢!太简单了:我如何以保持动态的方式创建代码?标题的数量可以是可变的。您知道吗必须动态构建sql字符串我不知道如何在代码中添加for循环来添加它,你有什么提示吗?简单的添加。for(…)。在我的语法中引发一个错误。我如何以保持动态的方式创建代码?标题的数量可以是可变的。可以是。你必须动态构建sql字符串。我不明白我如何在代码中放入for循环来添加它,你有什么提示吗?简单的添加。for(…)。在我的语法中引发一个错误
$title_1 = $tags_list[0];
$title_2 = $tags_list[1];

$stmt->bindParam(':title_1', $title_1);
$stmt->bindParam(':title_2', $title_2);