我正在尝试通过以下查询将数据插入<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
。
答案 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')"