English 中文(简体)
Mysql_query 不返回资源
原标题:mysql_query does not return a resource
  • 时间:2012-05-24 22:33:16
  •  标签:
  • php
  • mysql

我在StackExchange上下铺满了,很多互联网小站点的角形电脑, 寻找我的代码不起作用的好理由, 但这个密码让我无法工作。 我想在特定的 MySQL 表格中显示行数总数, 并将计数设置为变量, 稍后在脚本中使用。 当我运行下面的脚本时, 剧本会死, 我得到一个 PHP 警告, 告诉我我的sql_ result () 期望参数 1 成为资源, 给字符串 。

$conn = mysql_connect( mysql_server ,  username ,  password );
if (!$conn) {
    die( Connect Error   . mysql_error());
}
mysql_select_db( my_database , $conn);
if (!mysql_select_db( my_database )) {
    die( Could not select database:   . mysql_error());
}
$max_count_query = ("SELECT COUNT(*) FROM table");
// Perform Query
$max_count_action = mysql_query($max_count_query);
$mcount = mysql_result($max_count_action, 0, 0);
printf("
Number of Records to Process: ", $mcount);

StackOverflow的集体天才怎么想?

针对这些评论,我还要提供另一个小型代码板:

$conn = mysql_connect( 127.0.0.1 ,  username ,  password );
if (!$conn) {
    die( Connect Error   . mysql_error());
}
mysql_select_db( my_database , $conn);
if (!mysql_select_db( my_database )) {
    die( Could not select database:   . mysql_error());
}
$max_count_query = ("SELECT COUNT(*) FROM directory_nap");
// Perform Query
$max_count_action = mysql_query($max_count_query);
if (!$max_count_action){
    die( mysql query error:   . mysql_error());
    }
$mcount = mysql_result($max_count_action, 0, 0);
if (!$mcount){
    die( mysql result error:   . mysql_error());
    }
printf("
Number of Records to Process: ", $mcount);
最佳回答

只要 table tablename 表格名称只是一个样本(请参见bitfox的回答), 您的代码没有问题。 我可以在我的测试服务器上使用相同的代码, 并通过将表格名称更改为在自己的 db 中存在的表格名称来获取结果 。

然而,最令人不安的是,您要指出错误,上面写着 mysql_result () 期望参数1成为资源, 给定的字符串 -- 如果您的 SQL 有错误, mysql_query 返回布林 (docs ), 而不是字符串。 因此, 您要么重新显示与您实际使用的相同的测试代码, 或者给我们错误信息。

在某些时刻, 您的“ 强” 必须 < 强” < / 强” 在变量 < code> $max_ count_ action 中指定字符串。 当我发送有有意问题的查询时, 收到以下信息: < code> Warning: mysql_ 结果 () 期望参数1成为资源, 布林给定 -- 注意“ boolean”, 而不是字符串 。

因此,我认为你的第一步是选择不同的表格名称。 也就是说, 如果您使用一个保留单词作为表格或列名, 您仍然可以使用它, 绕着反方向字符 (`) 的字符串访问 :

SELECT COUNT(*) FROM `table`

第二步是查看 $max_count_action 发生什么情况才能将其转换成字符串。 最后,要始终使用 mysql_error 来调试,我建议用它做比生产代码 dide 更好一些的事情。

// working code on my test server
$max_count_query = ("SELECT COUNT(*) FROM users");
$max_count_action = mysql_query($max_count_query);
$mcount = $max_count_action ? mysql_result($max_count_action, 0) :  Error:  .mysql_error();
print "
Number of Records to Process: ". $mcount;
问题回答

错误很可能是在这里:

SELECT COUNT(*) FROM table

“强可量 < / 强> ” 是保留 SQL 语言的单词, 您应该更改它 。

从代码样本中看不出问题的原因(可能是表格名称错误,查询字符串周围的括号错误,等等),然而其中有一些不准确之处。 您可以尝试以下代码, 它至少应该固定几个侧边错误, 并向您提供有关错误的更多细节 :

$conn = mysql_connect( mysql_server ,  username ,  password );
if ($conn === false) {
    die( Connect Error   . mysql_error($conn));
}
if (mysql_select_db( my_database , $conn) === false) {
    die( Could not select database:   . mysql_error($conn));
}
$max_count_query = "SELECT COUNT(*) FROM table";
// Perform Query
$max_count_action = mysql_query($max_count_query, $conn);
if($max_count_action === false) {
    die( Query error   . mysql_error($conn));
}
$mcount = mysql_result($max_count_action, 0, 0);
if($mcount === false) {
    die( Result retrieval error   . mysql_error($conn));
}
printf("
Number of Records to Process: %s", $mcount);
mysql_free_result($max_count_action);

希望这有帮助,再见!

您询问的表格是否在您的代码中是一个占位符或真名? 尝试更改您的表格的另一个名称, 否则我要尝试 mysql_ fetch_ array , 而不是 mysql_ 结果

$max_count_query = "SELECT COUNT(*) FROM t";
// Perform Query
$max_count_action = mysql_query($max_count_query) or die (mysql_error());
$mcount = mysql_fetch_array($max_count_action);
printf("
Number of Records to Process: ", $mcount[0]);
$conn = mysql_connect( mysql_server ,  username ,  password );
if (!$conn) {
    die( Connect Error   . mysql_error());
}

这是可以的, 但连接和共致条件不需将连接和共致条件分隔为两行

mysql_select_db( my_database , $conn);

再次,这是值得怀疑的。如果您使用多个数据库,那么您在 SQL 中引用数据库比您的 PHP 代码中的跟踪状态简单得多,更安全。

if (!mysql_select_db( my_database )) {
   die( Could not select database:   . mysql_error());
}

你不是已经做了吗?

$max_count_query = ("SELECT COUNT(*) FROM table");

为什么是括号?

// Perform Query

这从代码上看是显而易见的吗?

$max_count_action = mysql_query($max_count_query);
$mcount = mysql_result($max_count_action, 0, 0);

将DB把手传递到 Mysql_query calls 会更干净些

您在连接后检查了错误, 在切换数据库后检查了错误, 但是您在 Mysql_query () 之后不检查错误吗?

printf("
Number of Records to Process: ", $mcount);

在格式字符串中没有用于 mcount 参数的占位符。 try:

printf("
Number of Records to Process: %d", $mcount);

我得到了PHP警告, 告诉我, Mysql_result () 期望参数1 成为资源, 给定字符串 。

那么您正在运行的代码并不是您向我们显示的代码; Mysql_query () 将不会返回字符串 。





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

php return a specific row from query

Is it possible in php to return a specific row of data from a mysql query? None of the fetch statements that I ve found return a 2 dimensional array to access specific rows. I want to be able to ...

Character Encodings in PHP and MySQL

Our website was developed with a meta tag set to... <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> This works fine for M-dashes and special quotes, etc. However, I ...

Pagination Strategies for Complex (slow) Datasets

What are some of the strategies being used for pagination of data sets that involve complex queries? count(*) takes ~1.5 sec so we don t want to hit the DB for every page view. Currently there are ~...

Averaging a total in mySQL

My table looks like person_id | car_id | miles ------------------------------ 1 | 1 | 100 1 | 2 | 200 2 | 3 | 1000 2 | 4 | 500 I need to ...