2009-10-08 119 views
0

我有這樣的功能:函數不返回正確的資源

function query_dp($sql) { 
    $link = mysql_connect('localhost', $bd_id, $bd_pass); 
    mysql_select_db("$bd"); 

    if (!$link) { 
     die('Could not connect: ' . mysql_error()); 
    } 

    return mysql_query($sql) or die(mysql_error()); 

    mysql_close($link); 
} 

在主程序中,當我嘗試做:

echo mysql_num_rows(query_db($sql)); 

我得到的回報

1 

當我不將這些代碼封裝在一個函數中,並直接將它用於主程序時,我得到了取得的行數。

該函數沒有返回資源,但是一個整數? WTF?

任何幫助將不勝感激!

+3

返回後無法關閉鏈接。在完成閱讀之前,您不想關閉鏈接。 – 2009-10-08 19:42:32

+2

不確定這是否相關,但是您調用query_db(),但函數名爲query_dp()' – 2009-10-08 19:46:15

+2

在您的mysql_close()結束函數調用之前,返回您的返回值。 mysql_close()甚至沒有被調用 – 2009-10-08 20:05:18

回答

0

這並不直接回答你的問題,但你不應該使用原始的mysql接口。它是笨重和程序性的。看看mysqli interface。不要試圖換舊的功能,如果你有一個支持的語言標準,已經這樣做了:上面的代碼d

你只是變得

$m = new MysqlI(...); 
$rc = $m->query(...); 
echo $rc->num_rows(); 
1

您的來電mysql_close意味着你不再有一個鏈接到您需要在mysql_num_rows的mysql資源

+3

返回後無法關閉連接;) – 2009-10-08 19:48:19

1

問題出在「或」運算符。你的函數返回的結果「的mysql_query($的SQL)或死亡(mysql_error())」的表達,這是1或0,我建議你使用這樣的:

$query_result = mysql_query($sql); 
if (!$query_result) { 
    die(mysql_error()); 
} 
return $query_result; 

而且這個功能的最後一行「 mysql_close($ link)「永遠不會被調用。

+0

錯誤的是,'OR DIE'PHP技巧從v.3.0開始有效。搜索SO,有一個相關的問題。雖然我不得不承認這是一種非常有嚼勁的習慣。 – Anax 2009-10-23 22:56:39

+1

請嘗試從http://pastebin.com/m4301f239運行代碼。你會看到'bool(true)',而不是'string(6)「string」' – 2009-10-23 23:09:45

+0

這是OR運算符的工作原理。在函數thing()的情況下,它被評估爲TRUE(或者實際上是NOT FALSE,見http://www.php.net/manual/ro/language.types.boolean.php),因此DIE部分永遠不會執行。 這與mysql_connect函數相同。如果連接失敗,短路OR操作員選擇第二部分(DIE)。 – Anax 2009-10-24 00:35:09