在下面您可以看到我的代码。
我多次阅读代码,但看不到错误。
错误是
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;
答案 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"]
]
);