【发布时间】:2015-09-11 10:33:56
【问题描述】:
我正在运行以下选择语句:
$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
}
回声返回: 从订单中选择 DISTINCT (MAX(OrderID)) 用户名 = 'email@email.com' 更新订单 SET Status = 'Failed' WHERE Status = 'Success' and OrderID =
订单 ID 为空! :(
【问题讨论】:
-
$oid = (...)不运行查询。您只需创建一个包含查询的变量。 -
$mysqli->query($oid);我在查询下面有这个。
-
顺便说一句:您的代码容易受到SQL Injection 的攻击。要修复这个关键的安全漏洞,请使用 Prepared Statements。
-
一旦它工作起来,我会修复所有漏洞。感谢您的提醒!
-
您可以添加更多您拥有的代码吗?据我了解 mysql->query 将返回一个包含您想要的值的结果。您需要从中提取值。查看文档:php.net/manual/en/function.mysql-query.php