我想从一个子域(不是多站点)获得最近5篇文章的列表,以显示在我们的主域上。以下是我试图执行的代码,但给出了错误-foreach()中提供的参数无效
global $wpdb;
$second_db = new wpdb(\'user\',\'pass\',\'db\',\'localhost\');
$rows = $second_db->get_results(\'SELECT post_title FROM wp_posts WHERE post_type="post" and post_status="publish" ORDER BY post_date DESC LIMIT 5\');
echo "<ul>";
foreach ($rows as $obj) :
echo "<li>".$obj->post_title."</li>";
endforeach;
echo "</ul>";
我甚至尝试在get\\u results中提供OBJECT、ARRAY\\N等,还尝试使用
$wpdb->prepare
但什么都没用。有什么想法吗?
另一个数据库也在同一台服务器上。
编辑:
通过$wpdb->print_error();
它显示-
WordPress database error: [] SELECT option_value FROM wp_options WHERE
option_name = \'_transient_feed_mod_eec437511a934edf3e159e1cc8a5844b\'
LIMIT 1
via公司
$second_db->print_error();
它显示-
Warning: mysql_error() expects parameter 1 to be resource, boolean given
EDIT 2:
最后,下面的代码开始工作了,我意识到了这个错误,并在评论中提到了它。现在,当一切正常运行时,我在输出之前收到以下文本(错误,如果可以的话)。
WordPress database error: []
代码-
global $wpdb;
$second_db = new wpdb(\'user\',\'pass\',\'db\',\'localhost\');
$second_db->show_errors();
$second_db->print_error();
$rows = $second_db->get_results(\'SELECT * FROM wp_posts WHERE post_type="post" and post_status="publish" ORDER BY post_date DESC LIMIT 5\');
echo "<ul>";
foreach ($rows as $obj) :
echo "<li>";
echo \'<a href="\' . $obj->guid . \'">\' . $obj->post_title . \'</a>\';
echo "</li>";
endforeach;
echo "</ul>";
还有,有没有更好的方法来获得帖子的永久链接,而不是使用
$obj->guid
?
SO网友:Justin Bell
我在看wp-db.php 请参见:
1384 if ( $this->dbh->connect_errno ) {
1385 $this->dbh = null;
这是在类函数中
db_connect()
, 被称为
wpdb
构造函数。在您描述的最新错误中:
警告:mysql\\u error()要求参数1为资源,给定布尔值
我们可以看到mysql_error()
未收到适当的参数。这个论点在这里起作用:
1211 public function print_error( $str = \'\' ) {
1212 global $EZSQL_ERROR;
1213
1214 if ( !$str ) {
1215 if ( $this->use_mysqli ) {
1216 $str = mysqli_error( $this->dbh );
1217 } else {
1218 $str = mysql_error( $this->dbh );
1219 }
1220 }
请注意第1216行和第1218行(这取决于您是否使用mysqli扩展)。它传递的参数是您的MySQL连接资源,如1384-1385所示,如果存在MySQL连接问题,则未正确定义该资源。这将使您很难在执行此操作时跟踪错误,但至少现在您知道这是一个连接问题。
正如@s\\u ha\\u dum所指出的,您应该验证连接信息以确保能够连接。如果你有WP_DEBUG
设置为false
, 这个mysql_connect()
(第1409、1411行)和mysqli_real_connect()
(第1379、1381行)使用@
抑制错误的前缀。使可能WP_DEBUG
如果这确实是问题所在,您应该会收到这些行的错误文本。