2013-03-17 88 views
1

中的查询结果我试图将可用现金的查询结果与股票价格进行比较,但它不起作用,我不明白为什么。我不明白为什么它不工作,因为他们似乎$现金$值是有效的数字。这是给我的问题。无法比较php

if($cash < $value) 

这是整个文件

<?php 

//configuration 
require("../includes/config.php"); 



//query user's portfolio 
if ($_SERVER["REQUEST_METHOD"] == "POST") 
{ 

    // Insert the stock into their portfolio 
    if(preg_match("/^\d+$/", $_POST["shares"])==false){ 

     apologize("Please enter full share numbers"); 

    }else{ 

    $cash = query("SELECT cash FROM users WHERE id = ?", $_SESSION["id"]); 

    // lookup stock 
    $stock = lookup($_POST["symbol"]); 

    // calculate total sale value (stock's price * shares) 
    $value = $stock["price"] * $_POST["shares"]; 

    if($cash < $value){ 
     apologize("you do not have enough money"); 
    }else{ 


     //insert stock into database  
     query("INSERT INTO shares 
      (id, symbol, shares) 
      VALUES (?, ?, ?) 
      ON DUPLICATE KEY UPDATE shares = shares + VALUES(shares)", 
      $_SESSION["id"], strtoupper($_POST["symbol"]),$_POST["shares"] 
      ); 

     // substract the share value from cash 
     query("UPDATE users SET cash = cash - ? WHERE id = ?", $value, $_SESSION["id"]); 

     redirect("/"); 
     } 

    } 
} 
else 
{ 


// render portfolio 
render("buy_search.php", ["title" => "Buy"]); 
} 
?> 

这是查询功能

function query(/* $sql [, ... ] */) 
{ 
    // SQL statement 
    $sql = func_get_arg(0); 

    // parameters, if any 
    $parameters = array_slice(func_get_args(), 1); 

    // try to connect to database 
    static $handle; 
    if (!isset($handle)) 
    { 
     try 
     { 
      // connect to database 
      $handle = new PDO("mysql:dbname=" . DATABASE . ";host=" . SERVER, USERNAME, PASSWORD); 

      // ensure that PDO::prepare returns false when passed invalid SQL 
      $handle->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
     } 
     catch (Exception $e) 
     { 
      // trigger (big, orange) error 
      trigger_error($e->getMessage(), E_USER_ERROR); 
      exit; 
     } 
    } 

    // prepare SQL statement 
    $statement = $handle->prepare($sql); 
    if ($statement === false) 
    { 
     // trigger (big, orange) error 
     trigger_error($handle->errorInfo()[2], E_USER_ERROR); 
     exit; 
    } 
    // execute SQL statement 
    $results = $statement->execute($parameters); 
    // return result set's rows, if any 
    if ($results !== false) 
    { 
     return $statement->fetchAll(PDO::FETCH_ASSOC); 
    } 
    else 
    { 
     return false; 
    } 
} 
+1

“query”函数在哪里定义?我敢打赌,这不是返回一个整数,而是一个数组或对象。 – fuzic 2013-03-17 03:36:45

+0

请做var_dump($ cash)和var_dump($ value);并向我们​​显示输出。 – Danack 2013-03-17 03:42:08

+0

转储($现金)给出了这样的阵列 ( [0] =>数组 ( [现金] => 0.00 ) ) 转储($值)给出了两倍。 – tironci 2013-03-17 03:47:01

回答

1
if ($cash[0]['cash'] < $value) 

根据您的调试评论,应该是这样,因为你需要访问数组索引的数组索引。如果你不想要这种格式,你应该看看你的查询结果如何返回,而不必使用嵌套数组。

0

$现金几乎肯定不是一个数字,甚至是一个标量值。

查询可能返回结果对象或数组的数组。