PHP: обновление SQL с PDO не работает.Ошибка: «SQLSTATE [HY093]: недопустимый номер параметра: количество связанных переменных не соответствует количеству токенов» - PullRequest
0 голосов
/ 31 января 2019

Здесь ниже вы можете увидеть мой код.

Я перечитывал свой код много раз и не вижу ошибки.

Ошибка

SQLSTATE [HY093]: недопустимый номер параметра: количество связанных переменных не соответствует количеству токенов

Мой код ниже (ошибка возникает при выполнении запроса внутри переменной $ sqlUpUser).

<?php

require '../shared/geolocation.php';

$user="db686186_adm";
$pass="#+-7en!Z";



try{


$coordinates = getCoordinates($adress); 


if($coordinates["geolocationSuccessful"]){

    $dbh = new PDO('mysql:host=nhl-mysqlw01;dbname=db686186', $user, $pass);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sqlUpUser = "UPDATE users SET "
        . "country=:country, "
        . "adress=:adress, "
        . "email=:email, "
        . "phone=:phone, "
        . "skype=:skype, "
        . "lat=:lat, "
        . "`long`=:long "
        . "WHERE id=".$_SESSION['id'];


    $stmt = $dbh->prepare($sqlUpUser); 


    $stmt->bindParam(':country', $country, PDO::PARAM_STR);
    $stmt->bindParam(':adress', $adress, PDO::PARAM_STR);
    $stmt->bindParam(':email', $email,PDO::PARAM_STR);
    $stmt->bindParam(':phone', $phone,PDO::PARAM_STR);
    $stmt->bindParam(':skype', $skype,PDO::PARAM_STR);
    $stmt->bindParam(':lat', $coordinates["latitude"], PDO::PARAM_STR);
    $stmt->bindParam(':long', $coordinates["longitude"], PDO::PARAM_STR);

    $stmt->execute();
    $stmt->closeCursor();
 }else{

   $_SESSION["emailExist"] = constant($coordinates["errorMessage"]); 
    header("Location:/profile/");
    return;
}
}catch(Exception $e){
    printf($e->getMessage());
}


$dbh = null;

1 Ответ

0 голосов
/ 31 января 2019

Вместо создания переменной, которая вам на самом деле не нужна, $sqlUpUser и привязка вручную позволяют PHP и PDO позаботиться о вещах.

$stmt = $dbh->prepare('UPDATE users SET
        country=:country,
        adress=:adress,
        email=:email,
        phone=:phone,
        skype=:skype,
        lat=:lat,
        `long`=:long
        WHERE id=' . $_SESSION['id']
);

$stmt->execute([':country' => $country ,
                ':adress'  => $adress  ,
                ':email'   => $email   ,
                ':phone'   => $phone   ,
                ':skype'   => $skype   ,
                ':lat'     => $coordinates["latitude"] ,
                ':long'    => $coordinates["longitude"]
                ]
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...