Мое подготовленное утверждение возвращает «ноль»

0

Я читал о предотвращении SQL-инъекции, и я попытался преобразовать свой код. Прежде чем я изменил его, когда страница была загружена, я бы обновил свой sql тем, что было в 'input[name="amount"]' и изменил текст id" freetexts "на любой echo json_encode($result); выдавал. Теперь, после того как я изменил его, значение freetexts продолжает изменяться на "null"

вот мой php

<?php
$username="XXX";
$password="XXX";
$database="XXX";
$amount = $_POST["amount"];


$conn = new mysqli(localhost, $username, $password, $database);

// Check connection
  if(mysqli_connect_errno()) {
      echo "Connection Failed: " . mysqli_connect_errno();
      exit();
   }

/* create a prepared statement */
if ($stmt = $conn->prepare("UPDATE freetexts SET amount = amount - ? WHERE 1")) {
}
/* Bind parameters: s - string, b - blob, i - int, etc */
$stmt -> bind_param("s", $amount);

//$update = "UPDATE freetexts SET amount = amount - '$amount' WHERE 1";
/* Execute it */
      $stmt -> execute();

      /* Bind results */
      $stmt -> bind_result($result);

      /* Fetch the value */
      $stmt -> fetch();

echo json_encode($result);

      /* Close statement */
      $stmt -> close();


?>

И вот мой javascript

    var amount = $('input[name="amount"]').val();
    $.ajax({
        type: 'POST',
        data: {
            amount: amount
        },
        url: 'textlimit.php',
        success: function(data) { //Receives the data from the php code
            document.getElementById('freetexts').innerHTML = "Current FREE texts left: " + data;
        },
        error: function(xhr, err) {
            console.log("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
            console.log("responseText: " + xhr.responseText);
        }
    });
  • 2
    Это запрос на обновление. Обновление не имеет результатов.
  • 0
    Я думал, что получаю результаты с fetch () ;?
Показать ещё 5 комментариев
Теги:
mysqli
prepared-statement

1 ответ

0
Лучший ответ

Благодаря @tkausl и @Darren, я понял, что нет, где в моем коде фактически выбирается строка, которую я хочу. Я также узнал, что WHERE 1 буквально ничего не делает. Это пересмотренный php, и он отлично работает, но я также сомневаюсь, что он оптимизирован. Любые идеи о том, что я могу сделать, чтобы сделать код лучше? Например, удаление $stmt → fetch(); если он не нужен

<?php
define('DB_SERVER', "localhost");
define('DB_USER', "XXX");
define('DB_PASSWORD', "XXX");
define('DB_DATABASE', "XXX");


$amount = $_POST["amount"];


$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_DATABASE);

// Check connection
  if(mysqli_connect_errno()) {
      echo "Connection Failed: " . mysqli_connect_errno();
      exit();
   }

/* create a prepared statement */
if ($stmt = $mysqli->prepare("UPDATE freetexts SET amount = amount - ?")) {

/* Bind parameters: s - string, b - blob, i - int, etc */
$stmt -> bind_param("s", $amount);

/* Execute it */
      $stmt -> execute();

      /* Bind results */
      $stmt -> bind_result($result);

      /* Fetch the value */
      $stmt -> fetch();



      /* Close statement */
      $stmt -> close();
      }

$query = "SELECT 'amount' FROM 'freetexts'";

$result = $mysqli->query($query);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
              echo json_encode($row["amount"]);  
    }
} else {
    echo "0 results";
}


$mysqli->close();
?>
  • 0
    на самом деле правильный способ проверить, была ли обновлена строка, ->num_rows ->affected_rows > 0 not ->num_rows
  • 0
    Когда я изменяю это, чтобы повлиять на строки, я получаю текст «0 результатов»
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню