在PHP中将行的MySQL值设置为默认值
因此,我有一个PHP表单向数据库添加一行。如果任何不需要的字段为空,则应使用该字段的默认值 我尝试用MySQLi实现这一点,如下所示:在PHP中将行的MySQL值设置为默认值,php,mysql,mysqli,default,Php,Mysql,Mysqli,Default,因此,我有一个PHP表单向数据库添加一行。如果任何不需要的字段为空,则应使用该字段的默认值 我尝试用MySQLi实现这一点,如下所示: $required = $_POST["required"]; $unrequired = isset($_POST["unrequired"])?$_POST["unrequired"]:"DEFAULT(`Unrequired`)"; $sql = $mysqli->prepare("INSERT INTO `table` (`Required`,`
$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
获取unrequired字段的值时,我得到了默认值(`unrequired`)而不是varchar列的默认值,int和double列的默认值为0
这个问题是由PHP还是MySQL引起的
注意:有些不需要的字段可以为空,有些不需要。那些不可为null的具有设置的默认值。int和double字段的设置默认值为1,其余字段可为空。您不能在数据库结构中设置默认值吗。下面你可以看到一个例子
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'
)
当您创建这样的表时,您就可以开始了。你也可以改变你的桌子
ALTER TABLE example_table
ALTER City SET DEFAULT 'Unrequired'
好吧,我想我解决了问题 由于我使用的是预先准备好的语句,因此我在重新筛选SQL查询语句中输入的每个参数都将转换为安全字符串、整数或双精度,因此我假设像
DEFAULT(column)
这样的表达式将被重新解释为“DEFAULT(column)”
,并将被视为字符串
虽然不是一个非常安全的解决方案,但我考虑过使用未准备好的语句,即concat每个参数并使用DEFAULT。为了使查询更安全,我将对字符串使用real\u escape\u string()。不,这不是我要问的。此外,还提到如果列没有默认值,则会导致错误。我要问的是如何将行字段的值设置为相应列的默认值。默认值是什么(
Unrequired
)?它应该返回默认值(无需
),并将插入到表中。您可以设置默认值而不是默认值(Unrequired
)。PHP让我有点难过,有很多类似的函数,它们的功能几乎相同,但有些函数比其他函数更正确,尽管它们看起来是一样的,而且并不总是很直观地找到最好的函数。。。