mysqli更新查询应该返回结果吗?

时间:2013-02-16 07:32:18

标签: php mysql mysqli

我正在将我的PHP代码从mysql更新为mysqli,但我似乎无法找到这个问题的答案:mysqli更新查询是否会返回结果?

使用mysql,我可以做到

$result = mysql_query("UPDATE `data` SET `field1` = 1 WHERE `key` = '$mykey');
即使查询没有返回任何行,

和$ result也会为真。

现在,在mysqli代码中,我有类似的东西(为清晰起见,删除了错误处理):

$stmt = $mysqli->prepare("UPDATE `data` SET `field1` = 1 WHERE `key` = (?)")
$stmt->bind_param("s", $mykey);
$stmt->execute();
$result = $stmt->get_result();

,$ result为false。

对于记录,查询有效(忽略我可能将其转录到stackoverflow中的任何拼写错误)并且数据库中的field1按预期正确更新。此外,get_result()适用于select查询,因此get_result()不可用。

基本上,我只是想知道这种改变的行为是否是预期的,或者我是否应该继续尝试在某处找到一些错误。

2 个答案:

答案 0 :(得分:13)

准备好的声明用

执行
 $stmt->execute();

execute()成功时返回TRUE,失败时返回FALSE。

由于UPDATEDELETEINSERT不会产生任何结果集,因此无需使用get_result()。如果您需要知道受影响行的总数,可以使用mysqli_stmt_affected_rows()函数来实现。

因此,您的代码可能如下所示

$stmt = $mysqli->prepare("UPDATE `data` SET `field1` = 1 WHERE `key` = (?)")
$stmt->bind_param("s", $mykey);
$stmt->execute();
//You can get the number of rows affected by your query
$nrows = $stmt->affected_rows;
if (!$nrows) {
    //Nothing has been updated
}

答案 1 :(得分:4)

非SELECT查询没有“结果集”,因此get_result对他们来说毫无意义。如果您想知道修改查询(UPDATEINSERTDELETE)是否使用$stmt->affected_rows。这将是0或非零,具体取决于查询是否执行任何操作。