我编写插件并在代码中使用此函数:mysqli_multi_query($wpdb->dbh, $sql_trigger);
. 不难猜测,在某些托管系统上,此功能工作正常,但在某些托管系统上,它会产生以下错误:
警告:mysqli\\u multi\\u query()要求参数1为mysqli,即/home/blah/blah中给定的资源。com/www/wp-content/plugins/blah/blah。php在线xxx
Question: 如何确定主机上使用的数据库类型,然后正确执行对数据库的查询?
Notice: 我对数据库的查询包含以下代码:
CREATE TRIGGER `blah_set_current_time_and_date_values`
BEFORE INSERT
ON $table_name
FOR EACH ROW BEGIN
SET NEW.date_visited = DATE_FORMAT(NOW(), \'%d-%m-&Y\');
SET NEW.time_visited = TIME_FORMAT(NOW(), \'%H:%i:%s\');
END;
That\'s 为什么我决定使用
mysqli_multi_query()
, 因为我不知道如何执行这个查询。还有,我试过使用
$wpdb->query($sql_string);
, 但在这种情况下,WP返回错误:
[Trigger already exists]
. 虽然它当时并不存在,但我使用
DROP TRIGGER IF EXISTS wordpress_rezart_statistics_set_current_time_and_date_values
.
SO网友:Rarst
wpdb->dbh
声明为受保护的属性,您甚至不应该访问它,除非您正在子类化wpdb
?
唯一的公共属性是wpdb->is_mysql
这只是硬编码的true
用于检测非本机数据库拖放。
所以总体来说wpdb
上下文应该是内部的,您可以设置连接并让它从该点处理细节。
我没有在WP上下文中使用触发器的经验,但不只是在WP上下文中使用任意查询听起来很奇怪query()
方法我建议你把事情弄清楚。问题可能是查询或相关的东西,而不是运行它的WP调用。