在Wordpress中使用时间系统,并在插入自定义表时遇到wp插入的奇怪问题。
我在functions.php中运行以下函数
function clock_in() {
if ( isset( $_POST['punch-in'] ) && '1' == $_POST['punch-in'] ) {
$user_id = get_current_user_id();
global $wpdb;
$wpdb->query( $wpdb->prepare(
"
INSERT INTO $wpdb->wp_diss_users_sessions
(session_id,session_begin)
VALUES ( %d, %s )
",
$user_id,'test'
) );
我已经使用对wp_users表的更新查询来测试该函数,以验证函数是否根据需要正确触发。
我收到的错误如下:
WordPress database error: [You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near
'(session_id,session_begin) VALUES ( 2, 'test' )' at line 2]
INSERT INTO (session_id,session_begin) VALUES ( 2, 'test' )
我的表是这样设计的:
[session_id] - INT(11) PK NN
[session_begin] - VARCHAR(45)
我理解最佳做法是使用prepare,所以我正在尝试适当地构建所有查询。我相信$ wpdb-> wp_diss_users_sessions =正确的语法来引用我的自定义表进行研究。也许我忽略了一些简单的事情,但今晚我的头疼。
全部谢谢
答案 0 :(得分:1)
您收到错误是因为您的查询中没有表名:
INSERT INTO (session_id,session_begin) VALUES ( 2, 'test' )
^ here should be a table name
只使用$wpdb->wp_diss_users_sessions
将无效,您的表名将不会神奇地出现在wpdb对象中。你必须自己存放它。
在this thread in the WordPress support forum中,建议在插件/主题的函数中添加它:
$wpdb->myplugintable = $table_prefix . 'myplugintable';
如果您将其放在一个函数中,请不要忘记使用$table_prefix
关键字在其范围内提取global
。
之后,您可以按照预期的方式访问表名。