PHP-插入数据时Mysql默认为NULL

时间:2019-03-18 06:15:38

标签: php mysql

我正在尝试通过以下查询将数据插入<input name="date" type="text" id="alltour" class="datepickerdate" placeholder="" value="" > $('#alltour').datepicker({ dateFormat: 'dd-mm-yy', minDate: 0, beforeShowDay: enableAllTheseDays, onSelect: function(dateText, inst) { $('#alltour').val(dateText); console.log('selected date',$('#alltour').val()); } }).datepicker("setDate", new Date()); 数据库中。

MySql

我收到此错误

  

错误的日期时间值:”,用于函数$sqlQuery = "insert into abc set a='$var1', b=STR_TO_DATE('$b', '%d/%m/%Y')"

当变量值丢失时,如何将str_to_date()a都默认设置为b

4 个答案:

答案 0 :(得分:1)

如果默认情况下这些列为空,则如果值为空,则可以在INSERT查询中将其忽略。使用数组动态生成查询,并将其内插到查询中。键代表列名,数组中元素的值是要插入的值。

$columns = [];

if (!empty($var1)) {
    $columns['a'] = $var1;
}
if (!empty($var2)) {
    $columns['b'] = date("Y-m-d", strtotime($var2));
}

if (!empty($columns)) {
    $query = "INSERT INTO abc (".implode(", ", array_keys($columns)).") 
                     VALUES (".implode(", ", array_values($columns)).")";
}

如果可以告诉您正在使用哪个数据库API(MySQLi或PDO),我可以向您展示如何动态创建准备好的语句,您真正应该使用的!参见How can I prevent SQL injection in PHP?

更新:在MySQLi中使用准备好的语句
MySQLi绑定是有序的,并且使用占位符作为?。您仍然像以前一样在$columns中生成值,但是查询的生成略有不同。

  • 使用trim(str_repeat("?, ", count($columns)), ", ")生成占位符。
  • 使用str_repeat("s", count($columns))生成类型。
  • 使用“拆包运算符” ...拆包所有值。

下面的代码假定连接对象称为$mysqli

if (!empty($columns)) {
    $column_list = implode(", ", array_keys($columns));
    $bindings_list = trim(str_repeat("?, ", count($columns)), ", ");
    $types_list = str_repeat("s", count($columns));

    $query = "INSERT INTO abc ($column_list)
                     VALUES ($bindings_list)";
    $stmt = $mysqli->prepare($query);
    $stmt->bind_param($types_list, ...$columns);
    $stmt->execute();
    $stmt->close();
}

答案 1 :(得分:0)

将数据库中这些列的默认值设置为NULL,以便在缺少这些值时将NULL自动保存为默认值。

答案 2 :(得分:-1)

不要给mysql更改日期格式。通过您的PHP代码来完成。

$a = !empty($_POST['var1']) ? $_POST['var1'] : null;
$b = !empty($_POST['var2']) ? date('d/m/Y', strtotime($_POST['var2'])) : null;
$sqlQuery = "Insert into abc(a,b) values('$a','$b')";

答案 3 :(得分:-1)

您应使用

格式

月/日/年:

$sqlQuery = "Insert into abc(a,b) values($var1',STR_TO_DATE('$b', '%m/%d/%Y')"