php - 为什么我的 PHP 条件不起作用?

标签 php mysql

大家好,这是我编写的 PHP 代码,用于在人们使用信用购买设施时减少 MySQL 上的“信用”表。但我希望当他们的“信用”为 0 时,他们会收到错误“您的信用不够,请购买信用”。但我看到“echo”没有给出这个错误!我的代码有什么问题?

<?php
if (session_id() == "")
{
   session_start();
}
if (!isset($_SESSION['username']))
{
   $accessdenied_page = '';
   header('Location: '.$accessdenied_page);
   exit;
}
$mysql_server = 'localhost';
$mysql_username = '*******';
$mysql_password = '******';
$mysql_database = '******';
$mysql_table = 'details2';
$success_page = 'League.php';
$username = 'username';
$db = mysql_connect($mysql_server, $mysql_username, $mysql_password);
      if (!$db)
      {
         die('Failed to connect to database server!<br>'.mysql_error());
      }
      mysql_select_db($mysql_database, $db) or die('Failed to select database<br>'.mysql_error());

$sql = "UPDATE `".$mysql_table."` SET `Credit` = `Credit` - 20  WHERE `username` = `".$username."` AND `Credit` >= 20";

mysql_query($sql, $db);


header('Location: '.$success_page);
exit;
?> 

最佳答案

首先我将解决您最初的问题

您遇到的问题是,您的UPDATE查询是以某种方式构建的,它总是更新表。如果我们仔细观察各个部分,您会发现差异。

SET `Credit` = IF(Credit > 0, Credit - 20, 0) 

SET 部分中,您根据 if 条件覆盖 Credit 列中的值。 if 条件始终返回一个值。如果 Credit 的值为 0 或更小,它将被覆盖为 0,而在所有其他情况下它将减少 20。这意味着无论如何都会有更新。

WHERE `username` = $username

where 子句限制被覆盖的行,但仅将username 列与给定的用户名进行比较。

因此,要将您的 UPDATE 限制为仅具有给定用户名和适当积分数量的行,您需要将这两个条件打包到 WHERE block 中您的UPDATE查询:

UPDATE table 
SET `Credit` = `Credit` - 20 
WHERE `username` = $username AND `Credit` >= 20;

在这种情况下,只有那些包含给定用户名并且具有足够积分的行才会被更新。

其他问题

您正在使用已弃用的数据库函数。这意味着这些功能不符合当今的标准。您应该了解mysqli prepared statementsPDO prepared statements使用现代工具。

关于php - 为什么我的 PHP 条件不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48355615/

相关文章:

MySQL - 任何额外的索引会加速这个查询吗?

mysql - 如何删除表中包含其他表外键的行

php - fatal error : call to undefined function imagecreatefromjpeg() centos

php - 当我使用 json 从 mysql 获取数据时,我在这个 "[ ]"下得到输出

javascript - VIES 增值税号验证

MySQL 事务 FOR COMMITING ON TRUE IF

php - JavaScript 显然会等待每个 AJAX 调用,然后再循环发送另一个调用

PHP 从不同的 mp3 创建 mp3

php - 如何插入多个具有自己类型的数据?

mysql - 连接多个select sql语句(4个表)