2009-04-23 102 views
6

我有這樣的代碼:檢查有效的MySQL結果資源

$rows = array(); 
$res = mysql_query($someQuery); 

if(!mysql_errno()) 
    while($row = mysql_fetch_assoc($res)) 
     $rows[] = $row; 

$someQuery是我寫的形式任意查詢。當我編寫一個帶有錯誤的mysql查詢時,mysql_errno捕獲了大小寫。但是,我剛剛發現,當我執行「Delete from table_name」查詢時,它當然不是錯誤,但同時mysql_fetch_assoc失敗,並顯示「Warning:mysql_num_rows():提供的參數不是有效的MySQL結果第x行/blah/blah/file.php中的資源「。

我試圖尋找它的說明書(也許我只是盲目的......)中但有我可以用它來檢查$水庫是一個有效的MySQL結果資源或不是一個函數?

+0

的可能重複的[警告:mysql_fetch_ *預計參數1是資源,布爾給定的錯誤(http://stackoverflow.com/questions/11674312/warning-mysql-fetch-expects-parameter-1-to-be -resource-boolean-given-error) – j0k 2012-07-30 12:30:12

回答

7

if ($res)應該可以正常工作,檢查它是否是一個資源。 is_resource()將決定它是否有效的資源。

你也可以查看mysql_affected_rows嘗試以確定它是否是一個INSERT/UPDATE /等

0

如果您通過mysql_query進行INSERT,UPDATE,DELETE或DROP,那麼它將只返回truefalse(取決於操作是否成功)。

我不知道你所期待包含在這種情況下的資源?

如果您需要受影響的行數,你可以使用mysql_affected_rows()

2

mysql_query()返回truefalse這樣你就可以檢查一下這種方式:

if($res) { 
    // The query succeeded. 
} 
+8

儘管對於所描述的問題,情況確實如此,但它有點誤導。如果查詢以某種方式改變數據庫(DELETE,INSERT,DROP等),mysql_query()返回true或false。但是如果查詢是SELECT,SHOW,DESCRIBE或EXPLAIN,它將返回一個資源。 – 2009-04-23 19:28:55

0

也許只是改變了條件到:

if(!mysql_errno() && @mysql_num_rows($res) > 0) 

如果沒有行,條件將失敗,@將s壓制警告。

3

隨着is_resource()可以使用get_resource_type()來檢查它是否是一個MySQL的資源。

$res_type = is_resource($res) ? get_resource_type($res) : gettype($res); 

if(strpos($res_type, 'mysql') === false) { 
    echo 'Invalid resource type: ' . $res_type; 
} 

get_resource_type()可能會因您的連接類型返回"mysql link""mysql link persistent"

+1

如果谷歌帶來任何人,上述警告抑制技術不適用於資源類型「」odbc鏈接「`。 – 2012-05-15 01:07:38

相關問題