![](/img/trans.png)
[英]mysql_query does not return anything but the query works fine in phpMyAdmin
[英]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.