2013-01-14 57 views
1

我想執行一個查詢,但PHP/MySQL的,將引發「調用一個成員函數fetch_row()一個非對象」儘管錯誤處理

Call to a member function fetch_row() on a non-object

即使

if(!$results) 

應該過濾掉空的結果。該錯誤消息指出

$row = $results->fetch_row(); 

這是整個代碼:

<?php 
$query = 'DELETE FROM `products` WHERE `company` ='.$id_nummer; 

$results = $link->query($query); 
if(!$results) 
{ 
    echo $link->error; 
} 
else 
{ 
    $row = $results->fetch_row(); 
    $wanted_result = $row[0]; 
} 
?> 

哪裏是這樣做的原因是什麼?

編輯:我解決了它與

if(!is_object($results)) 

更換

if(!$results) 

和它的作品。

+0

你初始化變量'$ link'? – JoshDM

+3

爲什麼你期望的結果從'DELETE'回來了? –

+0

我期望真實或錯誤。 –

回答

1

你正試圖從AA查詢作爲對象讀取行,但你正在查詢是DELETE不返回可以取爲行值,而是一個布爾(TRUE或FALSE),這是查詢成功與否的結果。 在這種情況下,$結果應該返回TRUE或FALSE值,可以使用像這樣的例子:

<?php 
$query = 'DELETE FROM `products` WHERE `company` ='.$id_nummer;  
$results = $link->query($query); 

if(!$results) { 
    echo $link->error; 
} else { 
    echo "Company id:".$in_number." successfully deleted." 
} 
?> 
+0

好吧作品。 –

0

你不能從DELETE查詢獲取的結果,因爲沒有行去取。的$results內容是布爾真或假的基礎上,DELETE的成功或失敗。

在你的情況下,它是TRUE,你的if (!$results)評估爲FALSE,送你到else

$results本身會告訴你操作是否成功(查詢是否在語法上有效),但$link->affected_rows會告訴你,如果你實際上設法匹配和刪除任何行。

if ($result && $link->affected_rows > 0) { 
    // You managed to delete something 
} 
else if ($result) { 
    // successful query, no rows deleted 
} 
else { 
    // Error 
    echo $link->error; 
} 

既然你似乎使用的MySQLi,考慮創建一個事先準備好的聲明,而不是query()這一點。

$stmt = $link->prepare("DELETE FROM `products` WHERE `company` = ?"); 
$stmt->bind_param('i', $id_nummer); 
$stmt->execute(); 

// Then check affected rows 
if ($stmt->affected_rows > 0) { 
    // Successful deletion of some rows... 
} 
+0

在我的方法中使用準備好的聲明有什麼好處? –

+0

@JackyRank優點始終是安全性,因爲您不需要對輸入進行清理(儘管您仍然可以從驗證中受益)另請參閱http://stackoverflow.com/questions/732561/why-is-using-a- mysql-prepared-statement-more-secure-than-using-the-common-escape –

+0

很好。看到這裏:http://stackoverflow.com/questions/14323476/number-of-variables-doesnt-match-number-of-parameters-yes-they-do –

相關問題