2012-02-21 106 views
1

可能重复:
PHP Error: mysql_fetch_array() expects parameter 1 to be resource, boolean givenmysql_fetch_assoc()预计参数1是资源,布尔给定的错误

我编码的PHP和MySQL程序中添加和检索的Facebook应用程序ID和秘密在database.But我得到以下错误。我的链接是http://freegiveaway.info/new/manageApp.php .btw我的数据库连接成功。

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, 
boolean given in /home/free/public_html/new/manageApp.php 

我的PHP包含follwing代码

$flag = $_POST['flag']; 
     $key = $_POST['key']; 
     $secret = $_POST['secret']; 
     $deleteApp=$_POST['deleteApp']; 
     $appN=$_POST['appN']; 
    $db = mysql_connect("localhost", "free_1", "password"); 
    mysql_select_db("facefunv_chuck", $db);  
    $app = mysql_query("SELECT * FROM tsp ORDER BY n",$db); 
     while ($apps = mysql_fetch_assoc($app)){ 

我上线得到错误而($应用= mysql_fetch_assoc($ APP)){

而且我的SQL文件如下

/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */; 
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; 
/*!40101 SET @[email protected]@COLLATION_CONNECTION */; 
/*!40101 SET NAMES utf8 */; 

-- 
-- Database: `facefunv_chuck` 
-- 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `tsp` 
-- 

CREATE TABLE IF NOT EXISTS `tsp` (
    `n` int(11) NOT NULL AUTO_INCREMENT, 
    `id` text NOT NULL, 
    `secret` text NOT NULL, 
    `restricted` int(11) NOT NULL, 
    `banned` int(11) NOT NULL, 
    PRIMARY KEY (`n`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=40 ; 

/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */; 
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */; 
/*!40101 SET [email protected]_COLLATION_CONNECTION */; 
+0

如果'mysql_query'失败,它将返回布尔值'false'而不是资源。调用mysql_error()来了解哪里出了问题。 – Basti 2012-02-21 18:32:23

+0

在这段时间之前添加一个'echo mysql_error()'并且发布它。它看起来像mysql_query函数没有返回正确的结果,可能是一些与查询/ db – 2012-02-21 18:33:55

+0

我得到这个错误查询失败:没有选择数据库 – vishnu 2012-02-21 18:40:46

回答

1

您正在使用mysql_select_db将db名称更改为“auto”。我猜想没有一个数据库名为自动与表茶匙。因此,$ app的结果是null,你不能在null上调用fetch。

+0

我现在改变了代码..但仍然没有数据库错误 – vishnu 2012-02-21 18:46:01

+0

访问拒绝用户'free_1'@'localhost'到数据库'facefunv_chuck' – vishnu 2012-02-21 18:47:26

+0

看起来像一个权限访问错误。尝试将localhost更改为IP地址127.0.0.1。该用户(free_1)和localhost在mysql.user表中是否有条目? Fyi localhost和127.0.0.1的功能在mysql中有所不同 – Ray 2012-02-21 19:28:26

1

mysql_query()返回FALSE,因此您的查询失败,并且您仍在尝试从中提取行。

首先尝试检查返回值:

$app = mysql_query("SELECT * FROM tsp ORDER BY n",$db); 
if (!$app) { 
    die("Query failed: " . mysql_error()); 
} 

while (($apps = mysql_fetch_assoc($app)) !== false) { 
    //... 
} 
+0

我出现此错误查询失败:未选择数据库 – vishnu 2012-02-21 18:39:51

+0

您的mysql_select_db调用可能失败。尝试'if(!mysql_select_db('auto',$ db)){die(mysql_error()); }' – drew010 2012-02-21 18:41:08

+0

哦,我得到了错误访问被拒绝用户'free_1'@'localhost'到数据库'facefunv_chuck' – vishnu 2012-02-21 18:47:18

1

总之,mysql_query()返回一个资源,如果选择成功,否则为FALSE。你应该检查你的代码中的错误。

可能有几个原因,但最明显的原因是您连接到数据库并且mysql_select_db()数据库“auto”,您尝试从表中选择数据。根据你的转储,数据库实际上被称为“facefunv_chuck”,而不是“auto”。

+0

我得到这个错误查询失败:没有选择数据库...但我选择了数据库 – vishnu 2012-02-21 18:40:10

+0

@JustinBiaber正如我所说答案是,您正在选择名为“auto”的数据库,但转储表示您的数据库实际上名为“facefunv_chuck”。 – 2012-02-21 18:41:19

+0

我改为mysql_select_db(“facefunv_chuck”,$ db); ..但仍然没有选择数据库 – vishnu 2012-02-21 18:44:17

相关问题