我正在尝试将可用现金的查询结果与股票价格进行比较,但它不起作用,我不明白为什么。我不明白为什么它不起作用,因为它们 $ 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;
}
}
答案 0 :(得分:1)
if ($cash[0]['cash'] < $value)
根据您的调试注释,它应该是您需要访问数组索引cash
的数组索引0
。如果您不想要这种格式,则应该查看返回查询结果的方式,而不必使用嵌套数组。
答案 1 :(得分:0)
$ cash几乎肯定不是数字,甚至是标量值。
查询可能会返回一个结果对象或数组的数组。