【问题标题】:If db column can be NULL set required input?如果 db 列可以为 NULL 设置所需的输入?
【发布时间】:2013-12-13 00:57:21
【问题描述】:

有没有办法让我询问所选列是否不能为空,以便 php 将值“必需”(html5)添加到输入中?

试图概述这个想法:

$vys = mysqli_query($db, "some query here"); 
while($arr = mysqli_fetch_assoc($vys)){
    echo "<input type='text' name='".$arr['name of column']."' value='' ".(canBeNull($arr['name of column']) ? "require" : "")." />";
}

在此之后,会出现一些“INSERT VALUES(...) INTO table”。此示例应该是“echo”表中的所有列,以便用户可以填写它们。是的,我知道,唯一可以用 mysqli_fetch_assoc 处理的查询是'SELECT * FROM column',但我认为这对注册表格非常有帮助,在注册新用户时,姓名和姓氏是强制性的(@ 987654325@ 列),但昵称是可选的(NULL 列)。并且当有几十个输入字段时应该非常节省时间。

你不知道,这些东西是怎么做的吗?

【问题讨论】:

    标签: php mysql sql html


    【解决方案1】:

    您可以事先添加SHOW COLUMNS FROM table 查询以获取列列表。然后有一个 Null 列,设置为 Yes 或 No。

    【讨论】:

    • 比在代码逻辑中处理它更“昂贵”。
    • 是的,在每次选择之前运行它并不聪明,这是肯定的。您将不得不权衡您的选择,如果这只是偶尔针对具有表单的页面运行一次,例如个人资料页面,那么它不应该是有害的。 MySQL 应该非常快地加载列列表。
    【解决方案2】:

    如果您执行如下查询:

    $q = $this->prepare("SHOW COLUMNS FROM `$table`");
    $q->execute();
    

    它返回一个像这样的数组:

    Array
    (
    [0] => Array
        (
            [Field] => dataid
            [0] => dataid
            [Type] => int(11)
            [1] => int(11)
            [Null] => NO
            [2] => NO
            [Key] => PRI
            [3] => PRI
            [Default] => 
            [4] => 
            [Extra] => auto_increment
            [5] => auto_increment
        )
    
    [1] => Array
        (
            [Field] => text
            [0] => text
            [Type] => varchar(255)
            [1] => varchar(255)
            [Null] => NO
            [2] => NO
            [Key] => 
            [3] => 
            [Default] => 
            [4] => 
            [Extra] => 
            [5] => 
        )
    
    )
    

    你可以这样检查。似乎这应该融入到 php 的业务逻辑中,但不必检查 db 可能是类中的属性,在构造中将 $notNull 设置为 true

    【讨论】:

      【解决方案3】:

      Mysqli 有额外的方法从查询中获取元数据。 mysqli_stmt::result_metadata

      例子

      $stmt = $mysqli->prepare("SELECT id, name FROM friends");
      $stmt->execute();
      
      /* get resultset for metadata */
      $result = $stmt->result_metadata();
      
      /* retrieve field information from metadata result set */
      $fields = $result->fetch_fields(); // array of std objects
      

      并检查哪些字段可能为空。

      (!($field->flags & MYSQLI_NOT_NULL_FLAG))
          echo $field->name;
      

      其他标志可以在这里获得:Predefined Constants

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-16
        • 2019-01-19
        • 2018-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多