如果db列可以为NULL设置所需的输入?

时间:2013-12-13 00:57:21

标签: php html mysql sql html5

有没有办法可以询问所选列是否为空,php应该在输入中添加“required”(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”,但我认为这对注册表格非常有用,在注册表单时注册新用户,名称和姓氏是强制性的(NOT NULL列),但昵称是可选的(NULL列)。当有数十个输入字段应该非常节省时间。

难道你不知道,这些东西怎么办?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果您执行以下查询:

$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

答案 2 :(得分:0)

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