2017-10-15 728 views
-2

我試圖從表中刪除一行,並檢查它是否工作/是否已找到並刪除了一行。我使用以下查詢來執行此操作: DELETE FROM TableName WHERE val1=1 AND val2=2 AND val3=3。我使用準備和執行功能通過連接$conn發送該代碼,並且它工作得很好。我正在查找的行正在被查找和刪除。但是如果我想檢查它是否使用$conn->affected_rows它返回-1,這意味着發生錯誤。我不明白,哪裏可能出現錯誤,即affected_rows返回-1,即使查詢已正確執行...PHP/MySQL:正確執行查詢,affected_rows返回-1

如果您不明白該問題,請隨時在評論中提問。

代碼:

$query = "DELETE FROM ComTasks WHERE comid=? AND obj=? AND type=0"; 
$response = paramQuery($conn, $query, array($communityid, $userid), "ss"); 
echo $conn->affected_rows; //=> -1 

function paramQuery($conn, $query, $params, $str){ 
    if(!is_array($params)) $params = array($params); 
    $stmt = $conn->prepare($query); 
    if($stmt === false) return -1; 
    for($i=0; $i<count($params); $i++){ 
     $params[$i] = &$params[$i]; 
    } 
    array_unshift($params, $str); 
    call_user_func_array(array($stmt, 'bind_param'), $params); 
    $stmt->execute(); 
    $result = $stmt->get_result(); 
    $stmt->close(); 
    return $result; 
} 
+2

請顯示代碼。 – Jeff

+0

並且你檢查了'$ conn-> error'嗎? – Jeff

+0

$ conn-> error什麼也沒有返回 – Unknown

回答

2

由於您使用的是事先準備好的聲明和$語句,該affected_rows也應該從$語句稱爲:

$stmt->affected_rows; 

但是,因爲你把它包在一個函數,並執行$ stmt-close(),這不會在函數調用之外工作。您可能必須調整您的函數以在關閉之前和函數返回之前存儲該值。

關於php手冊的更多信息:http://php.net/manual/en/mysqli-stmt.affected-rows.php

+0

我會試試這個,看起來很有意義。 (當我在這裏問這個問題時,我非常疲倦,並且以相同的想法醒來:D) – Unknown

+0

是的,它工作。 – Unknown