所以我有一个PHP表单来向数据库添加一行。如果任何不需要的字段为空,则应使用该字段的默认值。
我尝试用MySQLi实现这个:
$required = $_POST["required"];
$unrequired = isset($_POST["unrequired"])?$_POST["unrequired"]:"DEFAULT(`Unrequired`)";
$sql = $mysqli->prepare("INSERT INTO `table` (`Required`,`Unrequired`) VALUES (?,?)");
$sql->bind_param("is",$required,$unrequired);
$sql->execute();
但是当我尝试使用SELECT unrequired FROM table WHERE required = 33
获取不需要的字段的值时,我得到 DEFAULT(`Unrequired`)而不是varchar列的默认值,并且对于int和double列, 0 。
这个问题是由PHP还是MySQL造成的?
注意:某些不需要的字段可以为空,有些则不可用。那些不可空的那些具有设定的默认值。 int和double字段'设置默认值为1,其余可以为空。
答案 0 :(得分:0)
您不能只在数据库结构中设置默认值。您可以在下面看到一个示例;
using CUDArt
md = CuModule("/path/to/module.ptx",false)
MyFunc = CuFunction(md,"MyFunc")
GridDim = 2*2496
BlockDim = 64
launch(MyFunc, GridDim, BlockDim, (arg1, arg2, ...));
device_synchronize()
res = to_host(arg2)
当你创建这样的桌子时,你很高兴。你也可以改变你的表格
CREATE TABLE example_table
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Address varchar(255), DEFAULT 'unrequired'
City varchar(255) DEFAULT 'Unrequired'
)
答案 1 :(得分:0)
好吧,我想我发现了问题。
由于我正在使用预准备语句,因此我在reslting SQL查询语句中放入的每个参数都将转换为安全字符串,整数或双精度数,因此我认为像DEFAULT(column)
这样的表达式将会被重新解释为"DEFAULT(column)"
,并将被视为字符串。
虽然不是一个非常安全的解决方案,但我考虑过使用未准备好的语句,即将每个参数连接起来并使用 DEFAULT like in here。为了使查询更安全,我将使用real_escape_string()作为字符串。