2013-03-31 55 views
1

我有一个mysql php pdo语句,它具有单引号来调用Mysql Geolocation“POINT”函数。用单引号Php PDO sql语句

$sql = "INSERT INTO userTrip 
     (userId, fromLat, fromLon, fromLoc, fromPOI, 
     toLat, toLon, toLoc, toPOI, 
     tripFinished, isMatched, departureTime, createdAt) 
     values 
     (:user,:fromLat,:fromLon, GeomFromText('POINT(:fromLat1 :fromLon1)'),:fromPOI,:toLat, 
     :toLon, GeomFromText('POINT(:toLat1 :toLon1)'),:toPOI,0,0,:departureTime,:date)"; 

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

    $stmt->bindParam(':user', $userId, PDO::PARAM_INT); 
    $stmt->bindParam(':fromLat', $fromLat, PDO::PARAM_STR); 
    $stmt->bindParam(':fromLon', $fromLon, PDO::PARAM_STR); 
    $stmt->bindParam(":fromLat1", $fromLat, PDO::PARAM_STR); 
    $stmt->bindParam(':fromLon1', $fromLon, PDO::PARAM_STR); 
    $stmt->bindParam(':fromPOI', $fromPOI, PDO::PARAM_STR); 
    $stmt->bindParam(':toLat', $toLat, PDO::PARAM_STR); 
    $stmt->bindParam(':toLon', $toLon, PDO::PARAM_STR);   
    $stmt->bindParam(':toLat1', $toLat, PDO::PARAM_STR);   
    $stmt->bindParam(':toLon1', $toLon, PDO::PARAM_STR); 
    $stmt->bindParam(':toPOI', $toPOI, PDO::PARAM_STR); 
    $stmt->bindParam(':departureTime', $departureTime, PDO::PARAM_STR); 
    $stmt->bindParam(':date', date('Y-m-d H:i:s'), PDO::PARAM_STR); 

当我执行它抛出异常查询“PDOStatement对象::执行():SQLSTATE [HY093]:无效参数号:绑定变量的数目不匹配的令牌的数量”,即使参数的数量是正确的。我怀疑单引号抛出查询,但我需要把它们放入。我尝试使用反斜杠和其他所有我能想到的,但查询不会执行。有没有解决的办法?

回答

3

您不需要引号。你需要传递一个参数到函数中。这是准备好的陈述的目的。

定义第一

$point = "POINT($fromLat $fromLon)"; 

的值,然后准备查询通常的方式

..., GeomFromText(:point), ... 

那么这个$点变量绑定:点占位符。

+0

是的,谢谢!我实际上遇到了这个帖子,这基本上是你在上面建议的相同的东西..谢谢! http://stackoverflow.com/questions/10254558/php-pdo-prepared-statements-and-value-binding-gives-invalid-parameter-number-err?rq=1 – chintan

-1

如果您需要嵌入的SQL字符串单引号,这

(:user,:fromLat,:fromLon, GeomFromText('POINT(:fromLat1 :fromLon1)'),:fromPOI,:toLat, 

可能需要这个。

(:user,:fromLat,:fromLon, GeomFromText(''POINT(:fromLat1 :fromLon1)''),:fromPOI,:toLat, 
-- Two single quotes     ^^       ^^