Wordpress 在 wordpress 页面上弄乱了我的数据库调用?

Posted

技术标签:

【中文标题】Wordpress 在 wordpress 页面上弄乱了我的数据库调用?【英文标题】:Wordpress messing with my db calls on the wordpress pages? 【发布时间】:2011-08-04 00:32:53 【问题描述】:

嘿,大家还好吗?我遇到了数据库冲突,需要一些帮助。

基本上,我有一个包含随机数据库字段的标题。没什么特别的。它在我模板的标题中,并且在非 WordPress 页面上运行良好。

$sql = "SELECT * FROM headerslogans ORDER BY RAND() LIMIT 1";
    $result = mysql_query($sql);
    while ($myrow = mysql_fetch_array($result)) 
    echo $myrow['slogan'];
;

我正在使用相同的数据库、相同的用户名、相同的密码等。但是,我在应该回显的位置收到此错误....

Warning: mysql_query() [function.mysql-query]: Access denied for user 'nobody'@'localhost' (using password: NO) in <dir name>

显然,wordpress 连接正在“覆盖”另一个(wordpress 工作完美)。但是,我也很困惑为什么它不起作用,尽管它使用相同的用户名和密码连接到同一个数据库。

有人可以帮我解决这个问题吗?

更新:发布的连接代码

$x = mysql_connect($server,$dbuser,$dbpass,true) 或死(mysql_error()); mysql_select_db($dbname,$x);

【问题讨论】:

你的 header.php 文件中有这段代码吗?如果是这样,你应该那样做 这种代码应该放在插件中,或者至少放在你的functions.php中。 我明白你的意思。但我需要这段代码才能在网站的其他非 wordpress 驱动的部分上工作。此代码位于站点范围的 inc-header.php 包含文件中。无处不在,不仅仅是 wordpress。 你能贴出你的mysql连接代码吗?这就是问题所在,而不是sql语句。 @Ciaran - 当然。谢谢!就像我说的,这在非 Wordpress 页面上运行良好。谢谢您的帮助! $x = mysql_connect($server,$dbuser,$dbpass,true) 或死(mysql_error()); mysql_select_db($dbname,$x); 【参考方案1】:

正如你所说,连接被覆盖,数据库选择是否也被覆盖?很可能实际上mysql_select_db() 是让你搞砸的事情。通过将您的原始连接设置为变量来修复它,并在有问题的 mysql_* 函数中引用它,例如:

$dbcnct = mysql_connect(...);
mysql_select_db('...', $dbcnct);
mysql_query('...', $dbcnct);

这也不应该影响您当前的设置。

【讨论】:

您可以直接在查询中指定数据库:SELECT fieldname FROM database.table ...。选择默认数据库只是消除了明确指定数据库名称的需要。 没错,这将插入 OPs 当前设置,而无需更改所有查询... 感谢您提供的信息,但我已经尝试过了。我现在得到“警告:mysql_query():提供的参数不是 中的有效 MySQL-Link 资源”,仅在 wordpress 页面上。 你需要在使用你自己的mysql_query的页面上包含mysql_connect... @Dunhamzzz 好吧……那行得通……不幸的是。如果我每次都在 SQL 语句之前声明所有内容,它就可以工作。这意味着每次我想从中提取数据时,我都必须输入数据库名称、用户、登录名等。咕咕咕!! :) 当然还有另一种方法? 嗅嗅再次感谢!【参考方案2】:

@NarfFlarf:您可以只使用 WordPress 查询来获取您的数据 --

$sql = "SELECT * FROM headerslogans ORDER BY RAND() LIMIT 1";
$result = $wpdb->get_results($sql);
foreach ($myrow as $result) 
    echo $myrow->slogan;

请参阅this WordPress Codex entry 以获取更多参考。

更新

那么您或许可以尝试的其他方法是拥有&lt;img src="slogan.php" alt=""&gt;slogan.php

<?php
/* Instantiate own, non-WP MySQL connection */
/* Run query and retrieve image */

header("Content-type: image/jpeg");
echo file_get_contents('path/to/image/' . $image); // 'dynamic' image!
?>

【讨论】:

嗯嗯好主意!不过,让我把这把扳手扔进机器里。我到处都有代码,在很多不同的页面上,这使得调用数据库的传统方式。我真的很想避免改变所有这些,特别是因为我还没有那么精通 php 和 mysql 连接。 @NarfFlarf:查看我的更新答案,可能意味着对现有代码的修改更少。 我同意@stealthyninja 使用 wpdb 对象。我相信您还必须在文件顶部添加以下内容:

以上是关于Wordpress 在 wordpress 页面上弄乱了我的数据库调用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 jQuery 不能在 WordPress 页面上运行?

Wordpress:如何仅在特定页面上显示链接

Wordpress 在多个页面上使用相同的自定义 CSS

如何在 Wordpress 的感谢页面上使用重力表单字段?

php WordPress:注册Gravity Forms样式表,只在联系页面#snippet #WordPress上排队

在 wordpress 自定义主题索引上显示页面链接