MySQL用作PDO参数

时间:2014-12-03 01:37:18

标签: php mysql pdo

我有一个包含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     |

我该如何解决这个问题?

1 个答案:

答案 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作为参数传递。