我正在使用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();
}
谢谢你们!
答案 0 :(得分:3)
试试这样:
if($stmt->execute())
{
echo "Success";
}
else
{
echo "Error";
}
$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。