【问题标题】:Setting MySQL value of a row to default in PHP在 PHP 中将行的 MySQL 值设置为默认值
【发布时间】:2016-10-20 20:32:24
【问题描述】:

所以我有一个 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 列的默认值,并且 0 用于 int 和 double 列。

这个问题是 PHP 还是 MySQL 引起的?

注意:有些不需要的字段可以为空,有些则不能。那些不可为空的有一个设置的默认值。 int 和 double 字段的设置默认值为 1,其余为空。

【问题讨论】:

  • 它是什么默认值(Unrequired)?它应该返回 DEFAULT(Unrequired) 并将插入到您的表中。您可以设置默认值而不是 DEFAULT(Unrequired)。

标签: php mysql mysqli default


【解决方案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'

【讨论】:

  • 不,这不是我要问的。此外,this MySql 5.5 document 提到如果该列没有默认值,则会导致错误。我要问的是如何将行字段的值设置为相应列的默认值。
【解决方案2】:

好吧,我想我找到了问题所在。

由于我使用的是准备好的语句,我在 reslting SQL 查询语句中放入的 每个 参数都将被转换为安全的字符串、整数或双精度数,所以我想像 DEFAULT(column) 这样的表达式将被重新-解释为"DEFAULT(column)",将被视为字符串。

虽然不是一个非常安全的解决方案,但我考虑过使用未准备好的语句,即连接每个参数并使用 DEFAULT like in here。为了使查询更安全,我将对字符串使用 real_escape_string()。

【讨论】:

  • 确保使用mysqli_real_escape_string(),因为它应该是最新和最具体的功能(我认为?)。 PHP 在这方面让我有点难过,有很多类似的函数几乎相同,但有些函数比其他函数更正确,即使它们看起来相同,而且并不总是非常直观地找到最好的...
猜你喜欢
  • 2016-12-28
  • 2020-04-21
  • 2011-07-07
  • 2012-11-19
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
相关资源
最近更新 更多