我有一个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]:无效的参数号:绑定变量的数量与令牌的数量不匹配”即使参数的数量是正确的。我怀疑单引号会抛出查询,但我需要将它们放入。我尝试使用反斜杠转义它们以及我能想到的其他所有内容,但查询不会执行。有办法解决这个问题吗?
答案 0 :(得分:3)
您不需要引号。您需要将参数传递给函数。这就是准备好的陈述。
首先定义一个值
$point = "POINT($fromLat $fromLon)";
然后以常规方式准备您的查询
..., GeomFromText(:point), ...
然后将此$ point变量绑定到:point placeholder。
答案 1 :(得分:-1)
如果需要在SQL字符串中嵌入单引号,则
(:user,:fromLat,:fromLon, GeomFromText('POINT(:fromLat1 :fromLon1)'),:fromPOI,:toLat,
可能需要这样。
(:user,:fromLat,:fromLon, GeomFromText(''POINT(:fromLat1 :fromLon1)''),:fromPOI,:toLat,
-- Two single quotes ^^ ^^