带有 $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/