【问题标题】:How to increase mysql value from textbox value?如何从文本框值增加mysql值?
【发布时间】:2017-01-20 08:53:27
【问题描述】:

我正在尝试更新 MySQL 中的一个值,以增加一个数字。假设当前值为 50,如果我在文本框中键入 50,则 mysql 值变为 100。实际上只有下面的代码使用当前文本框值更新。

     function updateMaterial($code){
                global $conn;
                $sql = $conn->prepare("SELECT * FROM stock WHERE itemcode = '$code'");
                $sql->execute();
                while($row = $sql->fetch(PDO::FETCH_ASSOC)){
                    $this->id = $row['id'];
                }
                if(isset($_POST['qty'])){

                     $sql = $conn->prepare("UPDATE stock SET qty='qty +$this->qty' WHERE id='$this->id'");
                     $sql->execute();

                }

            }

if(isset($_POST['update'])){
    $code = $_POST['itemcode'];
    if($addstock->updateMaterial($code)){
     return true;
    }else{
     return false;
    }
}

【问题讨论】:

  • 1.您没有为第二个查询使用准备好的语句。 2. 你根本不需要第一个查询。 3. 第二个查询的语法错误。先尝试使用静态值,然后更改为准备好的版本
  • 你好。您的代码不安全。看看“Prepared Statements”是什么以及它们是如何工作的,你没有以正确的方式实现它。
  • @YourCommonSense 感谢您在我改进答案后逗留了足够长的时间以删除 DV

标签: php mysql pdo


【解决方案1】:

您在引号内有列名,我会说查询实际上是失败的,但您没有检查错误。为了证明这个假设,通过从屏幕传递 10 进行测试,看看数据库中 50 的值永远不会改变。

您还应该使用准备好的语句,以防止 SQL 注入

此外,您的第一个查询没有任何意义,如果您可以使用代码作为键获取行,然后在更新查询中使用它。

此外,由于这似乎是类的方法,因此不应使用global 收集 $conn 变量,它会破坏类的封装。它应该是一个类属性

class xxx
{
    private $conn;

    public function __construct($db_conn)
    {
        $this->conn = $db_conn;
    }


    function updateMaterial($code){

        $sql = $this->conn->prepare("UPDATE stock SET qty=qty+:incqty 
                                      WHERE WHERE itemcode = :code");
        $param = array(':incqty'=>$this->qty, ':code'=>$code);
        $sql->execute($param);

        if ( ! $sql ) {
            // while testing
            $arr = $sql->errorInfo();
            print_r($arr);
            exit;
        }      
    }

现在当你实例化对象时传递数据库连接句柄

$xxx = new xxx($conn);
$xxx->qty = 30;
$xxx->updateMaterial($code);

【讨论】:

  • 这是伟大的 Riggs,我猜你之前已经删除了答案..这也有效。谢谢
  • 糟糕,刚刚修正了 if 语句中的错字
猜你喜欢
  • 2012-11-26
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多