Php MySQL用作PDO参数

Php MySQL用作PDO参数,php,mysql,pdo,Php,Mysql,Pdo,我有一个包含notnull列、NULL列和DEFAULT'x'列的表。现在,我需要在PDO中准备一个查询,它接受来自POST的值,用参数绑定值,当用户没有指定任何内容时,用允许它的参数绑定NULL,并让不允许的参数使用默认值 下面是我尝试运行的简化代码: $_POST['allow_null'] = null; $_POST['not_null'] = "DEFAULT()"; $_POST['has_value'] = "Value"; $query = $db_connection->

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

如何解决这个问题?

绑定参数的关键在于它们只能被解释为字符串(或null)。以这种方式传递函数是不可能的。您需要构造查询,以便插入或更改的唯一内容是字符串本身

要以这种方式获取默认值,可以在查询中使用函数,并结合使用
default()
函数。您的SQL如下所示:

INSERT INTO my_table 
    (allow_null, not_null, has_value)
    VALUES
    (:allow_null, IFNULL(:not_null, DEFAULT(not_null)), :has_value)

然后,要获得默认值,只需传递null作为参数。

这是因为PDO认为您正在尝试运行函数。你到底想怎样插入它,给我们看看这个查询。@Fred ii-好的。我在那里放了一个示例代码。请尝试
'DEFAULT()'
,但是,您将
插入到我的\u表中的方式允许\u null,而不是\u null,具有\u值
,这就好像您试图插入到3个不同的表中一样;那是不对的。我建议您看一下手册,您可能想让应用程序更改查询,因为通过参数传递值default()将告诉它将其视为字符串而不是函数。此
插入my_表allow_null,not_null,has_value
需要
插入my_表(allow_null,not_null,has_value)
将列设置在括号内。然而,你的问题“我遇到了一个奇怪的问题,PDO将字符串“DEFAULT()”作为值插入。”-你告诉它使用
$\u POST['not_null']=“DEFAULT()”,或者我没有掌握什么?我在等待答案的同时进行了研究,发现了一个与此完全相同的答案。我会自己回答这个问题,但你比我强。