带单引号的Php PDO sql语句

带单引号的Php PDO sql语句,php,pdo,Php,Pdo,我有一个mysql-php-pdo语句,它用单引号调用mysql-Geolocation“POINT”函数 $sql = "INSERT INTO userTrip (userId, fromLat, fromLon, fromLoc, fromPOI, toLat, toLon, toLoc, toPOI, tripFinished, isMatched, departureTime, createdAt) values

我有一个mysql-php-pdo语句,它用单引号调用mysql-Geolocation“POINT”函数

    $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::execute():SQLSTATE[HY093]:无效参数编号:绑定变量的数量与令牌的数量不匹配”,即使参数的数量正确。我怀疑单引号偏离了查询,但我需要把它们放进去。我试着用反斜杠和其他我能想到的方法来逃避它们,但查询无法执行。有办法解决这个问题吗?

如果需要在SQL字符串中嵌入一个引号,请使用

(:user,:fromLat,:fromLon, GeomFromText('POINT(:fromLat1 :fromLon1)'),:fromPOI,:toLat,
可能需要这样

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

你不需要报价。您需要将参数传递到函数中。这就是准备好的声明的目的

首先定义一个值

$point = "POINT($fromLat $fromLon)";
然后以通常的方式准备您的查询

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

然后将$point变量绑定到:point占位符。

是的,谢谢!实际上,我看到了这篇文章,基本上和你上面所说的是一样的。。谢谢