php - 与 mysql 和 php 比较的问题

标签 php mysql

带有 $mds>=$preco 的行似乎不起作用,它总是返回 true 或 echo"COMPRADO"...

当 $mds 是 < $preco 但它不是时,它应该给我其他消息

$preco 位于另一个文件中:

$preco = $row['pret'];

php:

$sql= mysql_query("SELECT vnum, pret, attrtype0, attrvalue0, attrtype1, attrvalue1, attrtype2, attrvalue2, attrtype3, attrvalue3, attrtype4, attrvalue4, attrtype5, attrvalue5, attrtype6, attrvalue6, socket0, socket1, socket2 FROM dev_is_items WHERE id='$id'") or die(mysql_error());
    if(mysql_num_rows($sql)==1) {
    $conn = mysql_connect($db_host, $db_username, $db_pass);
    mysql_select_db("$db_name") or die("no database by that name");
    $mdsquery = mysql_query("SELECT coins FROM account.account WHERE id='".mysql_real_escape_string($_SESSION['user_id'])."' LIMIT 1");
    $mds = mysql_fetch_object($mdsquery);
    if($mds>=$preco){
        echo "COMPRADO";
    }else{
        echo "MOEDAS INSUFICIENTES";
    }

最佳答案

mysql_fetch_object() 不返回 coins 字段的值。它返回一个对象。如果您想检查 coins 字段的值,请执行以下操作:

if ($mds->coins > $preco) { …

您还应该知道mysql_fetch_object已被弃用。您不应使用任何 mysql_* 函数。相反,使用 mysqli_* 函数,或者更好的是 PDO .

很高兴您使用了 mysql_real_escape_string 来防止 SQL 注入(inject)攻击。然而,更好、更现代的解决方案是使用 PDO 的参数绑定(bind)。请参阅PDOStatement::bindValue方法举例。

最后,您的价格检查似乎存在逻辑错误。我假设 $preco 是商品的硬币价格,$coins 是用户拥有的硬币数量。如果是这种情况,那么您想要:

if ($mds->coins >= $preco) { …

注意>=。否则,用户将无法购买该元素,除非他们拥有的金币多于该元素的成本。

关于php - 与 mysql 和 php 比较的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29218375/

相关文章:

php - Composer 更新

php - 特定类别帖子中的 Wordpress 独特背景

php - 如何在 php(ubuntu) 上模拟 on_script_close,就像 .net on_form_close 行为一样?

php - 推进总是选择枚举列的默认值?

php - 如何获取默认值的记录

数据库 |关系数据库与非关系数据库在性能方面

javascript - 使用 json_encode() 和 JSON.parse 后地址数组输出错误

php - 更新查询不起作用

以下场景的 MYSQL 查询

mysql - 无法在 Ubuntu 14.2 上安装 mysql