Meine vorbereitete Anweisung verwendet nicht den aktualisierten Wert während der Ausführung, sondern den, den ich vor dem Binden gesetzt habe. Soll das so funktionieren? weil ich in Beispielen auf w3schools den aktualisierten Wert verwendete, also bin ich mir nicht sicher, was ich hier falsch mache, unter // winner comment ist ein problematischer Teil, $ assqlst2 verwendet keinen aktualisierten Wert von $ pointswon (ich habe das echo nur angegeben um sicherzustellen, dass die Werte korrekt sind und keine Fehler bei der Ausgabe auftreten.MySqli prepared Statement verwendet keinen aktualisierten Variablenwert beim Ausführen der Anweisung
<?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;
}
}
?>
Ich denke, Sie müssen sie jeweils trennen, und muss es wirklich verschachtelt werden? –
@LoganWayne Was meinst du? Wie separiere ich was? – Warix3