如何从文本框值增加mysql值?

时间:2017-01-20 08:53:28

标签: php mysql pdo

我试图在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 个答案:

答案 0 :(得分: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);