【问题标题】:SQL Query works in phpMyAdmin but not in php pageSQL Query 在 phpMyAdmin 中有效,但在 php 页面中无效
【发布时间】:2014-07-16 12:34:13
【问题描述】:

我遇到了一个奇怪的问题:

我有一个 php 页面,它编译并执行 MySQL 查询到我的 web 数据库。目标是使用自定义的非 MBR 空间关系函数尝试确定一个点是否在多边形内。

查询返回语法错误结果1064。

这是显示在我的页面上的回显查询:

SET @point = 'POINT(-63.610719000 44.669318000)'; SELECT * FROM `Zones` WHERE GISWithin(GeomFromText(@point), `zonePoly`) AND `zoneName` = 'trailerShareBoundary';

如果我将该查询字符串复制并粘贴到 phpMyAdmin 中,它就像一个魅力。

但是,当查询来自我的php页面时,返回以下错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM `Zones` WHERE GISWithin(GeomFromText(@point), `zonePoly`) AND `zon' at line 1(1064)

这是实现这一切的 php 代码:

    if(!is_null($lng) && !is_null($lat)){

    //Create a mySQL variable to store a MySQL POINT object
    $query= "SET @point = 'POINT(".$lng." ".$lat.")'; ";

    //Test if the POINT variable is within the trailerShareBoundary variable using
    //custom MySQL function
    $query.= "SELECT * FROM `Zones` WHERE GISWithin(GeomFromText(@point), `zonePoly`) AND `zoneName` = 'trailerShareBoundary';";
    echo "<br/>".$query."<br/>";

    $result=mysqli_query($connection,$query);

    var_dump($result);
    echo '<br/>';

    if(!$result==false){
        $instructions = "<p>LOCK REQUEST VALID</p>";
    }else{
        $instructions = "<p>LOCK REQUEST INVALID</p>";
        echo mysqli_error($connection) . "(" . mysqli_errno($connection) . ")";
    }
    echo $instructions;

}

我想出了一个解决方法:

如果我首先查询数据库以创建 @point 变量,然后创建一个 SEPARATE QUERY 以使用我的 SELECT 语句查询数据库,它会神奇地工作!这就是我的意思:

这行得通:

    //Create a mySQL variable to store a MySQL POINT object
    $query= "SET @point = 'POINT(".$lng." ".$lat.")'; ";
    $result=mysqli_query($connection,$query);
    echo "<br/>".$query."<br/>";
    //Test if the POINT variable is within the trailerShareBoundary variable using
    //custom MySQL function
    $query= "SELECT * FROM `Zones` WHERE GISWithin(GeomFromText(@point), `zonePoly`) AND `zoneName` = 'trailerShareBoundary';";
    $result=mysqli_query($connection,$query);
    echo "<br/>".$query."<br/>";

那么,谁能告诉我发生了什么事?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    mysqli_query不允许多查询,使用mysqli_multi_query

    这应该可行:

    //Create a mySQL variable to store a MySQL POINT object
    $query = "SET @point = 'POINT(".$lng." ".$lat.")'; ";
    
    $query .= "SELECT * FROM `Zones` WHERE GISWithin(GeomFromText(@point), `zonePoly`) AND `zoneName` = 'trailerShareBoundary';";
    $result=mysqli_multi_query($connection,$query);
    echo "<br/>".$query."<br/>";
    

    【讨论】:

      【解决方案2】:

      在第一个查询中,您将第一个查询附加到第二个查询。并且在程序内部的查询中也使用了分号。这就是 first 显示错误的原因。

      【讨论】:

        猜你喜欢
        • 2012-11-06
        • 1970-01-01
        • 1970-01-01
        • 2014-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-10
        • 1970-01-01
        相关资源
        最近更新 更多