mysql插入忽略,替换或更新重复 - 插入?

时间:2014-08-24 18:09:36

标签: php mysql sql

我正在使用php在我的数据库中“插入忽略”一行。有没有办法找出是否插入了一行?

代码如下所示:

if($stmt = $mysqli->prepare('INSERT IGNORE INTO my_table (key_a, key_b) VALUES (?, ?)'))
{
    $stmt->bind_param('ss', 'hello', 'world');
    $stmt->execute();
    $stmt->close();
}

谢谢你们!

4 个答案:

答案 0 :(得分:3)

试试这样:

if($stmt->execute())
{
echo "Success";

}
else
{
echo "Error";

}

同时检查mysqli::$affected_rows

$mysqli->affected_rows
  

mysqli :: $ affected_rows - mysqli_affected_rows - 获取的数量   以前的MySQL操作中受影响的行

答案 1 :(得分:2)

请尝试以下操作:$mysqli->affected_rows

Link

/* update rows */
$mysqli->query("UPDATE Language SET Status=1 WHERE Percentage > 50");
printf("Affected rows (UPDATE): %d\n", $mysqli->affected_rows);

答案 2 :(得分:1)

MySQL具有ON DUPLICATE KEY功能,您可以在其中定义插入失败的原因,因为有一些限制,例如unique_key或primary_key被插入两次。

在这种情况下,您可以捕获此类错误。 如果查询正常插入,则不会执行此块。 如果查询失败,则将执行该块。

现在,您可以调整此功能。 例如,在表中,添加一个具有默认0(零)值的insert_attempts列。 并尝试执行:

INSERT INTO my_table (key_a, key_b)
VALUES (?, ?) 
ON DUPLICATE KEY UPDATE
    insert_attempts = insert_attempts+1
;

所有记录成功后;使用insert_attempt>选择行0

答案 3 :(得分:1)

我认为execute()方法会返回true或false,所以我建议更多......像这样(还要注意你需要在关闭连接之前这样做):

if ($stmt->execute()) {
echo "success" 
} 
else
{
echo "Error"
}

,还要考虑获取语句以查看受影响的行数。您可以使用mysqli_stmt_affected_rows(statement)执行此操作,它将为您提供受影响的行。如果你使用它,它看起来像这样:

int mysqli_stmt_affected_rows ( mysqli_stmt $stmt )

也阅读here