php代码不更新数据库记录

php代码不更新数据库记录,php,mysql,Php,Mysql,我正在做一个基本的库存系统,我试图通过点击编辑按钮编辑和更新记录,该按钮通过url将id传递给流程文件,在那里我看到了id,我能够更改和更新数据,现在问题是产品类别,在它出现在一个文本框中之前,我必须键入新产品来替换旧产品,但这可能会导致拼写或其他错误,以避免我试图创建从数据库加载产品的下拉列表,我将选择要替换的新产品,但它不起作用,进程文件从html文件和查询中提取id我已经检查过了,它工作正常,但数据没有更新 <html> <form name="form

我正在做一个基本的库存系统,我试图通过点击编辑按钮编辑和更新记录,该按钮通过url将id传递给流程文件,在那里我看到了id,我能够更改和更新数据,现在问题是产品类别,在它出现在一个文本框中之前,我必须键入新产品来替换旧产品,但这可能会导致拼写或其他错误,以避免我试图创建从数据库加载产品的下拉列表,我将选择要替换的新产品,但它不起作用,进程文件从html文件和查询中提取id我已经检查过了,它工作正常,但数据没有更新

 <html>

       <form name="form" action="edit_record.php" method="POST" enctype="multipart/form-data">        

          <select name="pro_update" class="formTxtInputmany">        
             Product Name: <option>SELECT PRODUCT</option>                
             <?php 
             $sql = "SELECT pro_id,pro_name FROM products ORDER BY pro_name ASC";
             $query = $conn->query($sql);
             $result = $query->fetchAll(PDO::FETCH_ASSOC);
             $arrlength = count($result);

               for ($x = 0; $x < $arrlength; $x++){?>            
                    <option value="<?php echo $result[$x]['pro_id'].','.$result[$x]['pro_name']; ?>">
                      <?php echo $result[$x]['pro_name']; ?>
                   </option><?php 
               } ?>  

          </select>
          <input type="submit" value="UPDATE THE RECORD">
       </form>        
</html>

    // process file     

       <?php

       if(isset($_POST['pro_update'])){    
          $pro_update = $_POST['pro_update'];

          if ($pro_update == "SELECT PRODUCT"){        
               echo "please choose producct";        
          }else{        

            $values = explode(',', $pro_update);

            $pro_id = (int)$values[0];
            $pro_update = $values[1];

            $updateQuery = "UPDATE products SET pro_name = $pro_update
            WHERE pro_id = $pro_id";
            $query = $conn->prepare($updateQuery);
           $query->execute(array($pro_update));  

          }    
       }

产品名称:选择产品
//进程文件
你应该使用

$query->execute();  
而不是

$query->execute(array($pro_update));  
编辑

对字符串使用单引号&同时使用
trim()用于$id

$updateQuery = "UPDATE products SET pro_name = $pro_update
    WHERE pro_id = '$pro_id'";


您就快到了,但这是更好的方法。

您的$updateQuery的评估结果如下:
更新产品集pro_name={string},其中pro_id={int} 这是无效的sql语句,因为{string}必须被引用为“string”

如果您使用的是prepare语句,请尝试以正确的方式使用它:使用bindParam(PDO)或bind_param(mysqli)在sql查询中使用您的变量。这有两个好处:
1.对于有害的sql注入,您不必担心带引号的字符串、转义字符
2.多次使用准备好的查询,需要不同的值


关于,

您正在使用prepare,但实际上并没有准备好查询。在使用prepare时,您必须在查询中使用placehoders,您可能需要使用类似以下内容

 $updateQuery = "UPDATE products SET pro_name = :proname
    WHERE pro_id = :pro_id";
    $query = $conn->prepare($updateQuery);
    $query->execute(array(':pro_update'=>$pro_update,':pro_id'=>$pro_id)); 
因为有两种类型的占位符:命名占位符和位置占位符(?)。你也可以用这样的东西

 $updateQuery = "UPDATE products SET pro_name = ?
        WHERE pro_id = ?";
        $query = $conn->prepare($updateQuery);
        $query->execute(array($pro_update,$pro_id)); 

这些变量都有值,您有什么错误吗?您是否尝试回显$prod_id变量?它现在可以工作了谢谢,我只是没有刷新我想我很高兴听到:D
 $updateQuery = "UPDATE products SET pro_name = :proname
    WHERE pro_id = :pro_id";
    $query = $conn->prepare($updateQuery);
    $query->execute(array(':pro_update'=>$pro_update,':pro_id'=>$pro_id)); 
 $updateQuery = "UPDATE products SET pro_name = ?
        WHERE pro_id = ?";
        $query = $conn->prepare($updateQuery);
        $query->execute(array($pro_update,$pro_id));