尝试在数据库中保存子值时,变量数与准备语句中的参数数不匹配
Number of variables doesn't match number of parameters in prepared statement while trying to save son values in db
我知道这是一个老问题,我已经找到了很多答案,但其中 none 有效。我真的需要帮助。
我正在解码一些 JSON,然后需要用新值更新我的数据库。
$id = $_POST["user_id"];
$facebook = $_POST["facebookId"];
$userInfos = $_POST["userInfos"];
$json = json_decode($userInfos, true);
$coins = $json['coins'];
$score = $json['score'];
$highest_coins = $json['highest_coins'];
$upgrades = $json['upgrades'];
> line 89
$sql = "UPDATE app_user SET coins = ?, score = ?, highest_coins = ? WHERE user_id = ?";
$stmt->bind_param('iiis',$coins,$score,$highest_coins,$id);
$nb = $stmt->execute();
line 99
foreach(is_array($upgrades) as $person => $value)
{
$character_id = $value['character_id'];
$upgrade_id = $value['upgrade_id'];
$upgrade_level = $value['upgrade_level'];
$sql = "UPDATE user_upgrades SET upgrade_level = ? WHERE facebook_id = ? AND character_id = ? AND upgrade_id = ?";
$stmt->bind_param('isii', $upgrade_level, $facebook, $character_id, $upgrade_id);
$nb = $stmt->execute();
}
Number of variables doesn't match number of parameters in prepared statement on line 89
Invalid argument supplied for foreach() on line 99
非常感谢任何帮助。提前谢谢你。
is_array($upgrades) returns bool,你需要数组
试试这个方法
mysqli_stmt_bind_param($stmt, 'sssd', $code, $language, $official, $percent);
您正在创建一个名为 $sql
的变量,但不要使用它。我们没有看到您如何初始化 $stmt
。你需要这样的东西:
$stmt = $mysqli->prepare($sql);
适用于您的情况:
$sql = "UPDATE app_user SET coins = ?, score = ?, highest_coins = ? WHERE user_id = ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('iiis',$coins,$score,$highest_coins,$id);
$nb = $stmt->execute();
并在您的 foreach
中删除 is_array
,其中 returns 来自您的 array
的 boolean
。
我知道这是一个老问题,我已经找到了很多答案,但其中 none 有效。我真的需要帮助。
我正在解码一些 JSON,然后需要用新值更新我的数据库。
$id = $_POST["user_id"];
$facebook = $_POST["facebookId"];
$userInfos = $_POST["userInfos"];
$json = json_decode($userInfos, true);
$coins = $json['coins'];
$score = $json['score'];
$highest_coins = $json['highest_coins'];
$upgrades = $json['upgrades'];
> line 89
$sql = "UPDATE app_user SET coins = ?, score = ?, highest_coins = ? WHERE user_id = ?";
$stmt->bind_param('iiis',$coins,$score,$highest_coins,$id);
$nb = $stmt->execute();
line 99
foreach(is_array($upgrades) as $person => $value)
{
$character_id = $value['character_id'];
$upgrade_id = $value['upgrade_id'];
$upgrade_level = $value['upgrade_level'];
$sql = "UPDATE user_upgrades SET upgrade_level = ? WHERE facebook_id = ? AND character_id = ? AND upgrade_id = ?";
$stmt->bind_param('isii', $upgrade_level, $facebook, $character_id, $upgrade_id);
$nb = $stmt->execute();
}
Number of variables doesn't match number of parameters in prepared statement on line 89
Invalid argument supplied for foreach() on line 99
非常感谢任何帮助。提前谢谢你。
is_array($upgrades) returns bool,你需要数组
试试这个方法
mysqli_stmt_bind_param($stmt, 'sssd', $code, $language, $official, $percent);
您正在创建一个名为 $sql
的变量,但不要使用它。我们没有看到您如何初始化 $stmt
。你需要这样的东西:
$stmt = $mysqli->prepare($sql);
适用于您的情况:
$sql = "UPDATE app_user SET coins = ?, score = ?, highest_coins = ? WHERE user_id = ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param('iiis',$coins,$score,$highest_coins,$id);
$nb = $stmt->execute();
并在您的 foreach
中删除 is_array
,其中 returns 来自您的 array
的 boolean
。