【问题标题】:MySQL NULL or usser inputMySQL NULL 或用户输入
【发布时间】:2018-06-28 12:25:06
【问题描述】:

此代码用于将数据插入到我的表中。

     $sku = $conn->real_escape_string($_REQUEST['sku']);
    $name = $conn->real_escape_string($_REQUEST['name']);
    $price =  $conn->real_escape_string($_REQUEST['price']);
    $type =  $conn->real_escape_string($_REQUEST['type']);
    $size =  $conn->real_escape_string($_REQUEST['size']);
    $bWeight =  $conn->real_escape_string($_REQUEST['bWeight']);
    $fHeight =  $conn->real_escape_string($_REQUEST['fHeight']);
    $fWeight =  $conn->real_escape_string($_REQUEST['fWeight']);
    $fLenght =  $conn->real_escape_string($_REQUEST['fLenght']);


    //Insert Into mainInfo
    $sql = "INSERT INTO mainInfo (sku, name, price, type) VALUES ('$sku', 
    '$name', '$price', '$type')";
    if($conn->query($sql) === TRUE){
      echo "Records inserted Successfully <br> ";
    } else {
      echo "Error couldnt insert records: " .$conn->error;
    }


    //Insert Into properties
    $sql = "INSERT INTO properties (size, bWeight, fHeight, fWeight, fLenght, 
    sku) VALUES ('$size', '$bWeight', '$fHeight', '$fWeight', '$fLenght', 
    '$sku')";
    if($conn->query($sql) === TRUE){
      echo "Records inserted Successfully <br> ";
    } else {
      echo "Error couldnt insert records: " .$conn->error;
    }

这里是 HTML 代码,如果需要的话。

     <form class="prodInf" method="post" action="pehape/apstrade.php" >

<div class="container-fluid">
  <div class="row">
    <div class="col-md-4">
        <label class="labelName" for="prodSKU"><b>SKU</b> </label>
        <input type="text" name="sku">
          <br>
        <label class ="labelName"for="prodName"><b>Name</b> </label>
        <input type="text" name="name">
          <br>
        <label class ="labelName"for="prodPrice"><b>Price</b> </label>
        <input type="text" name="price">
          <br>
        <label id="lastProdInf" class ="labelName"for="prodType">Type 
      Switcher</label>
        <select class="prodctType" name="type">
          <option value="1" selected="selected">DVD-Disc</option>
          <option value="2">Book</option>
          <option value="3">Furniture</option>
        </select>

     </div>
   </div>
 </div>

  <br>

  <!--type apraksts un ievade -->
 <div class="container-fluid">
  <div class="row">
    <div class="col-md-4">
      <div class="inputDisplay">

        <!--DvD logs -->
        <div class="inputDvd">

            <label class="typePar" for="size"><b>Size</b> </label>
            <input type="text" name="size">

          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed 
     gravida fringilla sem, at lobortis lorem pulvinar et.</p>
        </div>

        <!--book logs -->
        <div class="inputBook">

            <label class="typePar" for="bWeight"><b>Weight</b></label>
            <input type="text" name="bWeight">

          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed 
     gravida fringilla sem, at lobortis lorem pulvinar et.</p>
        </div>

        <!--furniture logs -->
        <div class="inputFurniture">

            <label class="typePar" for="fHeight"><b>Height</b> </label>
            <input type="text" name="fHeight">
              <br>
            <label class="typePar" for="fWeight"><b>Weight</b> </label>
            <input type="text" name="fWeight">
              <br>
            <label class="typePar" for="fLenght"><b>Lenght</b></label>
             <input type="text" name="fLenght">

          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed 
    gravida fringilla sem, at lobortis lorem pulvinar et.</p>
        </div>

        </div>
      </div>
    </div>
  </div>

  <input type="submit" name="save" value="submit">
</form>

如果用户没有在某些字段中输入数据,我怎样才能将它们留空,现在这段代码给了我。 错误无法插入记录:不正确的整数值:第 1 行的列 'bWeight' 的'' 在我仅以 $size 输入数据后

【问题讨论】:

  • @CROZET 是正确的,除了这两个检查之外,请确保您的表的字段名称是否与您在查询中使用的名称匹配。

标签: php mysql database input


【解决方案1】:

首先,确保您的数据库架构中允许使用空值。 然后,您不应该将real_escape_string() 用于整数,因为此函数总是返回一个字符串(请参阅文档)。

您可以使用filter_var() 确保提供的值是整数或使用$value = (int) $userInput 强制转换为int。

还要注意,最好在任何地方使用准备好的语句而不是real_escape_string

【讨论】:

  • @user3783243 "00123" 不是整数:它是一个字符串。如果在从字符串转换为 int 后得到不同的值,则意味着您的原始数据不是整数。如果必须保留前导零(例如邮政编码),则不应将其存储为整数,而应将其存储为字符串。依赖 mysql 将 string 转换为 int 是一种不好的做法:如果您希望将 int 放入表中,请发送 int 而不是其他东西,同时希望 mysql 能够正确转换为 int。
  • 对于没有单位的重量示例,您是对的,该值没有意义,但带有单位的值不是整数,不应存储为 int。
  • (简化以前的 cmets)手册中没有关于 real_escape_string 未用于整数的任何内容。由于该值在查询中被引用,它应该被转义。投射可能会丢失数据。
猜你喜欢
  • 1970-01-01
  • 2011-02-16
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多