PHP / MySQL:查询正确执行,affected_rows返回-1

时间:2017-10-15 00:21:10

标签: php mysql mysqli

我试图从表中删除一行,并检查它是否有效/是否找到并删除了一行。我使用以下查询来执行此操作: DELETE FROM TableName WHERE val1=1 AND val2=2 AND val3=3。我使用prepare和execute函数通过连接$conn发送代码,它运行正常。正在寻找和删除我正在寻找的行。但是,如果我想使用$conn->affected_rows检查它是否有效,则返回-1,这意味着发生了错误。我不明白错误可能在哪里,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;
}

1 个答案:

答案 0 :(得分:2)

由于您使用的是预准备语句和$ stmt,因此还应该从$ stmt调用affected_rows:

$stmt->affected_rows;

但是,由于您将它包装在一个函数中,并执行$ stmt-close(),因此在函数调用之外不起作用。您可能必须调整函数以在关闭之前和函数返回之前存储该值。

有关php手册的更多信息:http://php.net/manual/en/mysqli-stmt.affected-rows.php