【问题标题】:updating mysql table using php gives no change使用 php 更新 mysql 表没有改变
【发布时间】:2013-04-08 06:08:22
【问题描述】:

我正在尝试使用 php 更新 mySQL 表。基本上我传递了一个 ordernumber (int) 并使用它来查找 isbn 和 quantityordered,然后我用它们来更新另一个表。

$orderID=$_POST["order_ent_number"];

$query="select ISBN from Orders where orderNumber='$orderID'";

$isbn = mysql_query($query) or die(mysql_error());


$query="select quantityOrdered from Orders where orderNumber='$orderID'";

$quantityordered = mysql_query($query) or die(mysql_error());



$query="UPDATE Books SET inStock='$quantityordered' WHERE inStock='0' AND isbn='$isbn'";

        $result = mysql_query($query) or die(mysql_error());

因此,使用 MySQL bench,查询工作(如果我用数字替换所有变量)并更改它。问题是当我在 PHP 中使用变量时,代码不起作用。我尝试了 mysql_escape_string 但也没有用。我检查了两个变量 $isbn 和 $quantityordered 的结果,它们是正确的。在服务器上运行它时我没有收到任何错误,但数据库中的 inStock 没有任何变化。搜了一圈,有人说我的变量需要转成整数?不确定这是否正确,但这就是我想出的全部。有什么建议么?

【问题讨论】:

  • 用mysqli代替mysql...

标签: mysql sql join sql-update


【解决方案1】:

实际上,您可以通过加入表格在单个 UPDATE 语句中完成此操作,

UPDATE  Books a
        INNER JOIN Orders b
            ON a.ISBN = b.ISBN
SET     a.instock = a.quantityOrdered
WHERE   a.instock = 0 AND
        b.OrderNUmber = '$orderID' AND
        a.ISBN = '$isbn' 

作为旁注,如果变量的值(s)来自外部,则查询很容易受到SQL Injection 的攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

【讨论】:

    【解决方案2】:

    也许你可以试试

    $query="select ISBN from Orders where orderNumber='".$orderID."'";
    $query="select quantityOrdered from Orders where orderNumber='".$orderID."'";
    $query="UPDATE Books SET inStock='".$quantityordered."' WHERE inStock='0' AND isbn='".$isbn."'";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 2019-07-24
      相关资源
      最近更新 更多