与mysql和php进行比较的问题

时间:2015-03-23 19:05:59

标签: 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";
    }

1 个答案:

答案 0 :(得分:0)

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

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

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

使用mysql_real_escape_string来防止SQL注入攻击是件好事。但是,更好和更现代的解决方案是使用PDO的参数绑定。有关示例,请参阅PDOStatement::bindValue方法。

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

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

请注意>=。否则,用户将无法购买该商品,除非他们更多的硬币而不是商品的费用。