我正在运行以下select语句:
$oid = ("SELECT DISTINCT (MAX(OrderID)) FROM orders WHERE Username = ". $_SESSION['Username'] ." ");
这将返回链接到该用户名的最高订单ID的值,因此它是它们的最后一个订单。我想然后运行此查询:
$Query = "update orders set Status = 'Failed' where Status = 'Success' and where OrderID = ". $oid ." ";
将更新订单表,将状态设置为失败(当前成功的位置)。
为什么$ oid,什么都没有回来?如果我手动输入值并通过PHPMyAdmin运行它可以正常工作。
if (strpos($url,'order-failed') !== false) {
$query = "SELECT DISTINCT (MAX(OrderID)) FROM orders WHERE Username = '". $_SESSION['Username'] ."' ";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
echo $row['OrderID']; // For Debugging
echo "<br /><br />";
$Query = "UPDATE orders SET Status = 'Failed' WHERE Status = 'Success' and OrderID = ". $oid ." ";
$mysqli->query($Query);
echo $Query; // For Debugging
}
回声回归: SELECT DISTINCT(MAX(OrderID))FROM订单WHERE Username ='email@email.com' 更新订单SET状态='失败'WHERE状态='成功'和订单ID =
订单ID为空! :(
答案 0 :(得分:1)
$oid
没有返回任何内容,因为它不是函数/方法,它是string类型的变量(隐式)。为什么你会期望一个字符串'返回'什么?
至于你的第二个查询,当然$oid
是空的。你之前没有给它任何东西。你不应该将第一个查询的结果分配给变量,这样你就可以在第二个查询中使用那个orderID(oid)吗?做吧!
答案 1 :(得分:0)
您无需使用WHERE
两次:
UPDATE订单设置Status ='Failed',其中Status ='Success',
whereOrderID =“。$ oid
更喜欢在复杂查询中使用AS
关键字:
SELECT DISTINCT (MAX(OrderID)) AS highest_order_id FROM orders WHERE Username = ...
您是否获取了查询结果?
$result = $mysqli->query($oid);
$row0 = $result->fetch_assoc();
$highest_order_id = $row0["highest_order_id"];
$Query = "UPDATE orders SET Status = 'Failed' " .
"WHERE Status = 'Success' AND OrderID = ". $highest_order_id ." ";
请注意我的示例代码仍然容易受到SQL Injection的攻击!
答案 2 :(得分:0)
为什么$ oid,什么都没有回来?
首先,检查错误:
$result = $mysqli->query($oid);
if (!$result)
{
echo("Error description: " . $mysqli->error);
}
然后,检查数据。
// Query
echo $oid;
// Result
echo $result->num_rows;
很可能你的查询根本就没有返回任何内容(没有错误),然后你应该能够在查询中发现它。