我有一个包含NOT NULL
列,NULL
列和DEFAULT 'x'
列的表格。现在,我需要在PDO中准备一个查询,该查询接受来自POST
的值,使用参数绑定值,并且当用户没有指定任何内容时,将NULL
与允许它的参数绑定,并设为那些没有的默认值。
这是我尝试运行的简化代码:
$_POST['allow_null'] = null;
$_POST['not_null'] = "DEFAULT()";
$_POST['has_value'] = "Value";
$query = $db_connection->prepare("INSERT INTO my_table allow_null, not_null, has_value
VALUES (:allow_null, :not_null, :has_value)");
$query->execute($_POST);
我遇到了奇怪的PDO问题,而不是插入字符串"DEFAULT()"
作为值。像这样:
| allow_null | not_null | has_value |
+------------+----------+-----------+
| NULL | DEFAULT()| Value |
我该如何解决这个问题?
答案 0 :(得分:1)
绑定参数的整个要点是它们只能被解释为字符串(或null)。以这种方式传递函数是不可能的。您需要构造查询,以便插入或更改的唯一内容是字符串本身。
要以这种方式获取默认值,您可以在查询中使用IFNULL
函数,并结合DEFAULT()
函数。你的SQL看起来像这样:
INSERT INTO my_table
(allow_null, not_null, has_value)
VALUES
(:allow_null, IFNULL(:not_null, DEFAULT(not_null)), :has_value)
然后要获取默认值,只需将null作为参数传递。