在PHP中将行的MySQL值设置为默认值

时间:2016-06-19 14:05:13

标签: php mysql mysqli default

所以我有一个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,其余可以为空。

2 个答案:

答案 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()作为字符串。