使用Prepare()插入空值

时间:2020-11-20 作者:silvered.dragon

我有类似的疑问

/* Query */
global $wpdb;
$tablename = $wpdb->prefix . \'data\';
$sql = $wpdb->prepare(
    "
    UPDATE $tablename
    SET
        `date` = %s,
    WHERE
        id= %d
    ",
    $_POST[\'date\'] == \'\' ? "NULL": $_POST[\'date\'],
    $_POST[\'id\']
);
$wpdb->query($sql);
这将导致:

UPDATE `date` SET \'NULL\' WHERE `id` = $_POST[\'id\'] 
因此prepare()将单引号添加到NULL,查询将字段设置为NULL string not NULL value。我唯一的修复方法是在prepare()函数之外使用变量,如下所示:

/* Query */
global $wpdb;
$tablename = $wpdb->prefix . \'data\';

/* Here I declare the variabile outside of the prepare() */
$date = $output[\'date\'] == \'\' ? "NULL" : $_POST[\'date\'];
$sql = $wpdb->prepare(
    "
    UPDATE $tablename
    SET
        `date` = $date,
    WHERE
        id = %d
    ",
    $_POST[\'id\']
);
$wpdb->query($sql);

1 个回复
最合适的回答,由SO网友:SequenceDigitale.com 整理而成

我找到的快速解决方案是str\\u替换空值。

/* Query */
global $wpdb;
$tablename = $wpdb->prefix . \'data\';
$sql = $wpdb->prepare(
    "
    UPDATE $tablename
    SET
        `date` = %s,
    WHERE
        id= %d
    ",
    $_POST[\'date\'],
    $_POST[\'id\']
);
// SQL = UPDATE prefix_data SET `date` = \'\' WHERE id = 1


$sql = str_replace("\'\'",\'NULL\', $sql);
// SQL = UPDATE prefix_data SET `date` = NULL WHERE id = 1

$wpdb->query($sql);

相关推荐

TinyMCE插件不支持jQuery 3.5.1(测试jQuery更新)

由于Wordpress似乎正在走向一个长期到期的jQuery更新,我开始测试我的一些插件(它们没有发布,只是我用于一些客户网站的东西);测试jQuery更新;。直到昨天,一切都很顺利,我遇到了以下问题。我有一个简单的插件,它在TinyMCE中添加了几个按钮(是的,我为该客户机制作的主题使用了经典编辑器),让他们可以轻松地将短代码和预先编写的HTML片段添加到帖子和页面中。代码非常标准:首先,通过连接到“mce\\U buttons”过滤器挂钩的函数注册按钮,然后通过连接到“mce\\U external\