1

我正在尝试将可用现金的查询结果与股票价格进行比较,但它不起作用,我不明白为什么。我不明白为什么它不起作用,因为它们似乎$cash$value是有效数字。这是给我问题的线。

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;
    }
}
4

2 回答 2

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

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

于 2013-03-17T03:55:40.570 回答
0

$cash 几乎可以肯定不是一个数字,甚至不是一个标量值。

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

于 2013-03-17T03:59:18.207 回答