如何在运行时更改sql_mode

时间:2011-03-11 13:50:13

标签: php mysql

我的MySQL服务器的sql_mode设置设置为STRICT。对于我正在开发的特定应用程序,我想将其更改为TRADITIONAL。但是,我无法在服务器级别执行此操作。

是否可以在PHP脚本中更改运行时的sql_mode设置?

2 个答案:

答案 0 :(得分:21)

嗯这应该有效

// connect to mysql and call the first query
mysql_query("SET SESSION sql_mode = 'TRADITIONAL'");

答案 1 :(得分:0)

WORDPRESS解决方案:

对于想要在WordPress中实现结果的人,以下是我的解决方案:

在您的主题/插件主页的functions.php文件中放置以下函数:

function get_zeroed_datetime() {
    $modes = array("SET SESSION sql_mode = 'TRADITIONAL'");
    global $wpdb;
    $wpdb->set_sql_mode($modes);
    return '0000-00-00 00:00:00';
}

例如,在执行数据库插入时,请像这样使用它:

$wpdb->insert('test_table',
            array(
                'verified_on' => get_zeroed_datetime()          
            ),
            array(              
                '%s'
            ));

其中'verified_on'是DATETIME格式的列名。

代码能达到的目的

如果在服务器上将sql_mode设置为STRICT,则不允许在DATETIME列中插入零值。上面的代码有助于解决此问题。