準備したステートメントが実行中に更新された値を使用していない、バインディング前に設定したステートメントを使用しています。 w3schoolsの例では更新された値を使用していたので、私はここで間違っていますか?// winnerコメントは問題のある部分です。$ assqlst2は$ pointswonの更新値を使用していません値が正しいことを確認するために、私は出力に何のエラーもありません)。MySqli prepared statmentはステートメントを実行するときに更新された変数値を使用しません
<?php
$dbserver = ""; //database information is populated in my script, i didn't put it here because of security resons.
$dbusername = "";
$dbpassword = "";
$dbname = "";
$dbrecievedPassword = $_POST['dbPassword'];
$winnerid = intval($_POST['winnerid']);
$winnername = $_POST['winnername'];
$pointswon = intval($_POST['pointswon']);
$loserid = intval($_POST['loserid']);
$losername = $_POST['losername'];
$pointsph = $pointswon;
if($dbrecievedPassword != null && $dbrecievedPassword == $dbpassword) {
echo "PWD_OK";
}
else {
echo "PWD_INCORRECT";
}
$conn = new mysqli($dbserver,$dbusername,$dbrecievedPassword);
mysqli_select_db($conn,$dbname);
if($conn->connect_error) {
die("Connection failed: ".connect_error);
}
if($winnerid != null) {
if($sqlst = $conn->prepare("SELECT * FROM table_name WHERE uid=?")) {
if($assqlst2 = $conn->prepare("UPDATE table_name SET as_points=? WHERE as_uid=?")) {
if($sqlst3 = $conn->prepare("INSERT INTO table_name (as_uid,as_points,as_username) VALUES (?,?,?)")) {
$sqlst->bind_param("i",$winnerid);
$assqlst2->bind_param("ii",$pointswon,$winnerid);
$sqlst3->bind_param("iis",$winnerid,$pointswon,$winnername);
if($loserid != null) {
//winner
if(!$sqlst->execute()) {
echo $conn->error;
}
$sqlst->bind_result($b1,$b2,$b3);
$sqlst->fetch();
$pointswon = $pointsph + intval($b3);
echo $pointswon." ".$winnerid;
if(!$assqlst2->execute()) {
echo $conn->error;
}
//loser
$winnerid = $loserid;
if(!$sqlst->execute()) {
echo $conn->error;
}
$sqlst->bind_result($c1,$c2,$c3);
$sqlst->fetch();
$pointswon = intval($c3) - $pointsph;
$sqlst->close();
if(!$assqlst2->execute()) {
echo $conn->error;
}
$assqlst2->close();
}else {
if(!$sqlst->execute()) {
echo $conn->error;
}
$sqlst->bind_result($k1,$k2,$k3);
$sqlst->fetch();
if($k1 != null) {
$pointswon = intval($pointsph) + intval($k3);
$sqlst->close();
if(!$assqlst2->execute()) {
echo $conn->error;
}
$assqlst2->close();
}else {
$pointswon = $pointsph;
$sqlst3->execute();
$sqlst3->close();
}
}
}else {
echo $conn->error;
}
}else {
echo $conn->error;
}
}else {
echo $conn->error;
}
}
?>
私はあなたがそれらをそれぞれ分離しなければならないと思います。本当にネストする必要がありますか? –
@LoganWayneどういう意味ですか?どのように私は何を分離するのですか? – Warix3