2013-03-31 5 views
1

У меня есть оператор mysql php pdo, который имеет одинарные кавычки, чтобы вызвать функцию MOSQGolocation «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 :: Execute(): SQLSTATE [HY093]: Неверный номер параметра: число связанных переменных не соответствует количеству жетонов», даже если число параметров являются правильными. Я подозреваю, что одиночные кавычки выбрасывают запрос, но мне нужно их вставить. Я попытался убежать от них, используя обратную косую черту, и все остальное, о чем я мог подумать, но запрос не будет выполнен. Есть ли способ обойти это?

ответ

3

Вам не нужны котировки. Вам нужно передать параметр в функцию. Вот за что подготовлены заявления.

определяют значение первого

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

затем подготовить ваш запрос обычным способом

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

затем связать эту переменную $ точки в точку: заполнитель.

+0

Yup thanks! Я на самом деле столкнулся с этим сообщением, которое по сути является тем же, что вы предлагаете выше. Спасибо! 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     ^^       ^^ 
Смежные вопросы