MySQL - PDO - 如果POSTS为NULL则允许

时间:2015-06-14 18:20:01

标签: php mysql pdo

如果我填写表单中的每个输入,数据将成功进入数据库,但是当我没有填写输入电话时,数据将不会进入数据库并会出错:

error sqlstate 23000 integrity constraint violation 1048 column 'telephone' cannot be null

这意味着,如果现场电话为空,我将点击提交,数据将不会进入数据库。

所以我的问题是:如果textinput'电话'没有填写,数据仍然会进入数据库吗?

这是.php

<?php


include("dbconfig.php");

if( isset($_POST['name']) )
{

try {


    $date= date('d.m.y');
    $tijd= date("H:i A");
    $ip = $_SERVER['REMOTE_ADDR'];

    $conn = new PDO('mysql:host=localhost;dbname=*****', $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 


    $mhbt = $conn->prepare("INSERT INTO orders (name, email, telephone, city) VALUES (?, ?, ?, ?)");
    $mhbt->bindParam(1, $_POST["name"]);
    $mhbt->bindParam(2, $_POST["email"]);
    $mhbt->bindParam(3, $_POST["telephone"]);
    $mhbt->bindParam(4, $_POST["city"]);


    $mhbt->bindParam(5, $date);
    $mhbt->bindParam(6, $tijd);
    $mhbt->bindParam(7, $ip);

    $mhbt->execute();

} catch(PDOException $e) {
    echo 'ERROR: ' . $e->getMessage();
}

}



?>

3 个答案:

答案 0 :(得分:1)

创建具有not null属性的列时要小心。当您想要将数据保存到该表时,您需要始终传递值。

表中的变化。更改telephone field to null的默认值。因此,如果未分配任何值,则会自动将null添加到telephone field

只需执行以下查询: - ALTER TABLE orders MODIFY COLUMN telephone VARCHAR(15) NULL

注意: - 在db级别更好。它将使未来的问题得到放松。谢谢。

答案 1 :(得分:0)

如果电话为null即可,只需更改架构即可:

ALTER TABLE orders MODIFY COLUMN telephone VARCHAR(15) NULL

如果您不是,请修改表格以获得一些默认值:

ALTER TABLE orders MODIFY COLUMN telephone VARCHAR(15) NOT NULL DEFAULT '000-0-0000000'

答案 2 :(得分:0)

您的问题主要有两种可能性:

1-您更改数据库结构

a)允许NULL值

ALTER TABLE orders MODIFY COLUMN telephone VARCHAR(50) NULL;

b)通过设置默认值(如空字符串)

ALTER TABLE orders MODIFY COLUMN telephone VARCHAR(50) NOT NULL DEFAULT '';

2-将空电话号码写为空字符串

$mhbt->bindParam(3, (isset($_POST["telephone"]) ? $_POST["telephone"] : ''));

如果您可以编辑数据库结构,我认为您应该选择选项1.如果您必须控制数据库结构并且必须发送空电话号码,请使用选项2.