mysqli更新在mysqli_stmt_affected_rows中返回1但DB中的任何更改

时间:2015-09-11 19:05:45

标签: php mysql mysqli

我的代码在mysqli_stmt_affected_rows($ stmt)中返回1:

$stmt = $this->db->prepare('UPDATE milestone SET date = ? WHERE id = ?');
$a = 1;
$b = 110;
$stmt->bind_param("ii", $b, $a);    
$stmt->execute();
sendResponse(200, json_encode(mysqli_stmt_affected_rows($stmt)));
$stmt->close(); 

但我看不到MySQL数据库的任何变化!这是正确的没有关于它,我甚至用SELECT选择了同一个Aplication。问题在哪里?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为问题相当明显。您将110传递到日期字段,这将无法正常工作。日期字段通常传递日期或日期和时间的字符串表示。

然而,这确实突出了这样一个事实,即您没有正确检查查询结果,只是假设它们始终有效。

同样坚持一个或其他范例,即mysqli OO或Proceedural,但不要在两者之间切换。

所以我建议你开始在所有数据库访问代码上使用这个方法。

$stmt = $this->db->prepare('UPDATE milestone SET date = ? WHERE id = ?');
if ( ! $stmt ) {
    echo $this->db->error;
    exit;
}

$a = 1;
// pass a string representation of a date
$b = '2015-09-12';

// change the date parameter's data type to string
$stmt->bind_param("si", $b, $a);    

$status = $stmt->execute();
if ( ! $status ) {
    echo $stmt->error;
    exit;
}

sendResponse(200, json_encode($stmt->affected_rows));