PHP:使用PDO进行SQL更新不起作用。错误:“ SQLSTATE [HY093]:无效的参数编号:绑定变量的数量与令牌的数量不匹配”

时间:2019-01-31 13:55:57

标签: php pdo

在下面您可以看到我的代码。

我多次阅读代码,但看不到错误。

错误是

  

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 :(得分:0)

$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"]
                ]
);