这里发生了几件事
滥用$wpdb->prepare
这是一种非常奇怪的使用方式
prepare
:
$sql = $wpdb->prepare(\'SELECT ID FROM \' . $ignore_url_table_name . " where url LIKE \'%%%s%%\'", $urlRequested);
特别是
%s
你有
\'%%%s%%\'
, 这很不寻常。
prepare
期望
%s
, 并将为您插入引号,因为它已经知道它是一个字符串。此外,尽管它与
sprintf
, 事实并非如此
sprintf
功能也不完全相同。正在应用类型转换、消毒和逃逸等。这是一个安全函数,不是简单的字符串操作函数。
例如,这:
$sql = $wpdb->prepare(\'%s %s\', \'hello\', \'world\' );
结果如下:
"hello" "world"
WP Cron在数据库表中永远找不到作为示例提供的URL。这是因为
doing_cron
之后始终具有不同的值,因此它不会出现在表中。如果你把它放在桌子上,它也不会起作用,因为它不会再出现第二次。
相反,解决方案是认识到这种方法在某些情况下是完全不正确的,这本是一个更好的解决方案:
if ( wp_doing_cron() ) {
return;
}
类似地
wp_doing_ajax
应该进行检查,您可能希望捕获RESTAPI和RSS提要,但由于您从未提供问题的上下文以及URL检测的目的,因此我无法进一步发表评论