Javascript 我准备好的语句返回“null”

Javascript 我准备好的语句返回“null”,javascript,php,mysqli,prepared-statement,Javascript,Php,Mysqli,Prepared Statement,我正在阅读有关防止SQL注入的内容,并试图转换代码。在我更改它之前,当加载页面时,我会用“input[name=amount]”中的任何内容更新我的sql,并将id freetexts的文本更改为echo json_encode$result中的任何内容;发了。现在,在我更改它之后,freetexts的值一直变为null 这是我的php <?php $username="XXX"; $password="XXX"; $database="XXX"; $amount = $_POST["am

我正在阅读有关防止SQL注入的内容,并试图转换代码。在我更改它之前,当加载页面时,我会用“input[name=amount]”中的任何内容更新我的sql,并将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();


?>

多亏了@tkausl和@Darren,我意识到在我的代码中没有任何地方真正选择了我想要的行。我还了解到,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();
?>

这是一个更新查询。更新没有结果集。我以为我是用fetch;?获取结果的;?是和否。获取获取结果,是。但是没有可获取的结果,因为您告诉数据库更新数据,但不向您返回结果。更新不会将数据发送回您。update可以或将向您发送的唯一信息是受影响的行。如果你想要你的数据,你必须要求它,也就是说,你必须写你的select。除了@tkausl所说的,检查查询是否有效的唯一方法是检查num_行,看看它是否大于10@Darren这在很大程度上取决于您如何定义工作。例如,您有一个“users”表,其中包含用户名、密码和您可以通过执行某项操作获得的点数。比方说,你是一个友好的人,你想给每个人10分免费。因此,您编写更新“更新用户设置点=点+10”。现在的问题是,您没有用户,因此受影响的行num_rows为0。这是否意味着您的查询不起作用?这可能不是最好的例子,但也有查询,如果某个内容是真的,你只想更新,但你不在乎它是否真的改变了什么。实际上,检查一行是否已被更新的正确方法是->受影响的行>0 not->num\u rows当我更改它以影响行时,返回的文本是0 results我指的是更新,当然是在选定的行上,然后分别在num_行上
<?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();
?>