INSERT NULL值不起作用而我得到0.000

Ste*_*son 2 php mysql

我正在尝试将表单输入到使用数值(主要是小数)的数据库中

此表单更新并插入正常,但我希望NULL字段插入NULL数据库.

如果我将字段留空,它仍会放入0.000数据库.我将数据库设置为NULL = YES

是否有一小段代码我可以用来为所有14个文本框执行此操作?

这是我的代码:

<?php
if (isset($_POST['submit'])) {

$date2 = date("y-m-d"); // DATE OF TANK ADDITION
$time2 = date("H:i:s", time() - 3600);   // TIME OF TANK ADDITION 

$test1 = $_POST['test1']; 
$test2 = $_POST['test2']; 
$test3 = $_POST['test3']; 
$test4 = $_POST['test4']; 
$test5 = $_POST['test5']; 
$test6 = $_POST['test6']; 
$test7 = $_POST['test7']; 
$test8 = $_POST['test8']; 
$test9 = $_POST['test9']; 
$test10 = $_POST['test10']; 
$test11 = $_POST['test11']; 
$test12 = $_POST['test12']; 
$test13 = $_POST['test13'];
$test14 = $_POST['test14'];
$time = $_POST['time'];
$date = $_POST['date'];
$month = $_POST['month'];
$day = $_POST['day'];
$active1 = $_POST['active1'];
$active2 = $_POST['active2'];
$active3 = $_POST['active3'];
$active4 = $_POST['active4'];
$active5 = $_POST['active5'];
$active6 = $_POST['active6'];
$active7 = $_POST['active7'];
$active8 = $_POST['active8'];
$active9 = $_POST['active9'];
$active10 = $_POST['active10'];
$active11 = $_POST['active11'];
$active12 = $_POST['active12'];
$active13 = $_POST['active13'];
$active14 = $_POST['active14'];
$tank = $_POST['tank'];


$insert = "INSERT INTO tests SET 
member_id='$_SESSION[SESS_MEMBER_ID]', 
test1='$test1', 
test2='$test2',
test3='$test3',
test4='$test4',
test5='$test5',
test6='$test6',
test7='$test7',
test8='$test8',
test9='$test9',
test10='$test10',
test11='$test11',
test12='$test12',
test13='$test13',
test14='$test14',
date='$date', 
month='$month', 
day='$day', 
time='$time',
active1='$active1',
active2='$active2',
active3='$active3',
active4='$active4',
active5='$active5',
active6='$active6',
active7='$active7',
active8='$active8',
active9='$active9',
active10='$active10',
active11='$active11',
active12='$active12',
active13='$active13',
active14='$active14',
tank_id='$tank'"; 
Run Code Online (Sandbox Code Playgroud)

jer*_*oen 5

如果某个字段为空或有人在编辑时将其清除(我认为也可以),则该值为空字符串.

因此,为了确保插入NULL有空字符串的位置,您可以(对于所有可能的变量NULL):

$test1 = ($_POST['test1'] === '') ? NULL : $_POST['test1'];
Run Code Online (Sandbox Code Playgroud)

这将真正设置值NULL而不是插入时将被强制转换为0的空字符串.

您应该为sql插入使用预准备语句.

编辑:还要注意,当您尝试插入您的NULL值时,您应该只插入NULL而不是插入'NULL'.通过切换到带有绑定变量的预准备语句也可以解决该问题.

编辑2:在这里工作的临时解决方案是从sql语句中删除引号并将它们添加到赋值中:

$test1 = ($_POST['test1'] === '') ? NULL : ("'" . (float) $_POST['test1'] . "'");
...
Run Code Online (Sandbox Code Playgroud)

和:

$insert = "INSERT INTO tests SET 
member_id='$_SESSION[SESS_MEMBER_ID]', 
test1=$test, 
test2=$test2,
test3=$test3,
...
Run Code Online (Sandbox Code Playgroud)

我以前(float)至少摆脱了sql注入问题(mysql_real_escape_string()可能更好,不知道,不再使用它了......),但这更像是一个黑客而不是一个真正的解决方案.请切换到带有绑定变量的预准备语句.