gpt4 book ai didi

mysql - wpdb->使用prepare()插入自定义wp表

转载 作者:行者123 更新时间:2023-11-29 12:54:01 25 4
gpt4 key购买 nike

在 WordPress 中使用时间系统,在插入自定义表时遇到 wp insert 的一些奇怪问题。

我正在我的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)

我知道最佳实践是使用准备,因此我尝试适本地构建所有查询。我确实相信 $wpdb->wp_diss_users_sessions = 正确的语法可以从研究中引用我的自定义表。也许我忽略了一些简单的事情,但今晚我的头很痛。

谢谢大家

最佳答案

您收到错误是因为查询中没有表名:

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';

如果将其放入函数中,请不要忘记使用 global 关键字将 $table_prefix 拉入其范围内。

之后您可以按照您想要的方式访问表名称。

关于mysql - wpdb->使用prepare()插入自定义wp表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24349287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com