【发布时间】:2014-08-05 15:07:39
【问题描述】:
我有一个函数可以从我的表中删除一行,如果该行之前存在,我想返回 true。我使用以下函数实现:
$mysqli = $this->mysqli;
$stmt = $mysqli->prepare("DELETE FROM active_clients WHERE token LIKE ?");
$stmt->bind_param('s', $token);
$stmt->execute();
if($stmt->affected_rows < 1){
$stmt->close();
return false;
}
$stmt->close();
return true;
它也在我的本地主机上正常工作,但是当我移动到实时服务器时,它没有返回正确的结果。受影响的行总是返回 0,但该行被删除,因为它应该是。怎么会这样? php版本有问题吗?我在本地运行 5.4 并在实时服务器 5.3 上运行...或者它是否也可能与数据库或服务器配置有关?
【问题讨论】:
-
为什么不使用
WHERE token = ?在这里使用 LIKE 可能不是您想要的,因为它可能会产生不需要/意外的结果。 -
检查以确保受影响的行首先返回正确的数字:
printf("Affected rows: %d\n", $stmt->affected_rows); -
我只是请求令牌的第一个字符串,使用“blablabla%”作为要测试的字符串。这就是我使用 LIKE 语句的原因。 $stmt->affected_rows 正好返回 0
-
@abimelex 回顾我的回答和您的问题,我发现我们错过了
prepare()上的$this->mysqli,比较也应该是if($stmt->affected_rows < 0),因为if($stmt->affected_rows < 1)表示少于一排受影响