簡體   English   中英

mysql_query不返回資源

[英]mysql_query does not return a resource

我一直在StackExchange上下徘徊,互聯網在許多較小的站點上都是聚寶盆,尋找我的代碼無法正常工作的任何正當理由,但這讓我很困惑。 我想顯示特定MySQL表中的總行數,並將計數設置為變量,以便稍后在腳本中使用。 當我運行以下命令時,腳本死了,並且得到了PHP警告,告訴我mysql_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("\nNumber 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("\nNumber of Records to Process: ", $mcount);

只要table tablename只是一個示例(請參閱bitfox的答案),您的代碼就沒有問題。 我可以在測試服務器上使用相同的代碼,並通過將表名更改為我知道自己數據庫中存在的表名來獲得結果。

然而,最麻煩的是,您指出錯誤,表明mysql_result() expects parameter 1 to be resource, string given -如果您的SQL出錯,則mysql_query返回布爾值( docs ),而不是字符串。 因此,您可能沒有顯示與實際使用的測試代碼相同的代碼,或者給我們提供了不正確的錯誤消息。

在某個時候,您必須將字符串分配給變量$max_count_action 這是我發送有意問題的查詢時得到的結果: Warning: mysql_result() expects parameter 1 to be resource, boolean given -注意“布爾值”,而不是字符串。

因此,我認為您的第一步是選擇其他表名。 就是說,如果您使用保留字作為表名或列名,則仍然可以通過在反引號(`)字符中加上字符串來訪問它:

SELECT COUNT(*) FROM `table`

第二步是查看$max_count_action發生了什么,將其轉換為字符串。 最后,始終如一地使用mysql_error進行調試,但是我建議對它進行一些比die生產代碼更好的事情。

// 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 "\nNumber 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("\nNumber of Records to Process: %s", $mcount);
mysql_free_result($max_count_action);

希望這會有所幫助,再見!

您問題中的“表格”是代碼中的占位符還是真實姓名? 嘗試更改“表”表的其他名稱,否則我想嘗試使用mysql_fetch_array而不是mysql_result

$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("\nNumber 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);

將數據庫句柄傳遞給mysql_query調用會更加巧妙。

連接后檢查錯誤,切換數據庫后檢查錯誤,但是mysql_query()之后不檢查錯誤嗎?

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

mcount參數的格式字符串中沒有占位符。

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

我得到一個PHP警告,告訴我mysql_result()期望參數1為資源,給定字符串。

那么您正在運行的代碼不是您向我們展示的代碼; mysql_query()將不會返回字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM