如果指向页面,则运行查询

时间:2015-09-11 10:33:57

标签: php mysql

我正在运行以下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为空! :(

3 个答案:

答案 0 :(得分:1)

$oid没有返回任何内容,因为它不是函数/方法,它是string类型的变量(隐式)。为什么你会期望一个字符串'返回'什么?

至于你的第二个查询,当然$oid是空的。你之前没有给它任何东西。你不应该将第一个查询的结果分配给变量,这样你就可以在第二个查询中使用那个orderID(oid)吗?做吧!

答案 1 :(得分:0)

  1. 您无需使用WHERE两次:

      

    UPDATE订单设置Status ='Failed',其中Status ='Success', where OrderID =“。$ oid

  2. 更喜欢在复杂查询中使用AS关键字:

    SELECT DISTINCT (MAX(OrderID)) AS highest_order_id FROM orders WHERE Username = ...
    
  3. 您是否获取了查询结果?

    $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 ." ";
    
  4. 请注意我的示例代码仍然容易受到SQL Injection的攻击!

答案 2 :(得分:0)

  

为什么$ oid,什么都没有回来?

首先,检查错误:

$result = $mysqli->query($oid);
if (!$result)
{
  echo("Error description: " . $mysqli->error);
}

然后,检查数据。

// Query
echo $oid;
// Result
echo $result->num_rows;

很可能你的查询根本就没有返回任何内容(没有错误),然后你应该能够在查询中发现它。