【发布时间】:2011-02-20 09:23:38
【问题描述】:
我找到this on php.net 来检查文件是否存在。
我想先检查记录是否存在,然后进行更新,否则进行插入。
if(record exist) {
update query}
else
{ insert query}
我知道如何更新或插入,但不知道如何先检查记录是否存在。是怎么做到的?
【问题讨论】:
-
你是指什么样的记录?
标签: php
我找到this on php.net 来检查文件是否存在。
我想先检查记录是否存在,然后进行更新,否则进行插入。
if(record exist) {
update query}
else
{ insert query}
我知道如何更新或插入,但不知道如何先检查记录是否存在。是怎么做到的?
【问题讨论】:
标签: php
我遇到了同样的问题,我使用 REPLACE INTO 解决了这个问题,这是一个这样工作的 MySQL 扩展:
当我不需要记住记录的旧值时,我发现此方法很有用。 例如,如果你想增加一个值,这个方法不是一个好方法,因为会删除旧记录和旧值。
请记住,您需要同时拥有 INSERT 和 DELETE 权限才能使用 REPLACE。
这是基于我的代码的示例:
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "REPLACE INTO table_name (name, age, current_date)
VALUES ('" . $name . "', $age, '" . date('Y-m-d') . "')";
if ($conn->query($sql) === FALSE) {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
【讨论】:
$username = $_POST["user"];
$query = mysql_query("SELECT * FROM users WHERE username='$username'");
if(mysql_num_rows($query) != 0)
{
echo "Username already exists";
}
else
{
//proceed with code here
}
【讨论】:
奇怪没有人提到使用 REPLACE?
【讨论】:
我会推荐 Dominic Rodger 的解决方案,但需要稍作改动以使其更快。 您应该选择一个值且不超过一行。
$result = mysql_query("SELECT key FROM table1 WHERE something LIMIT 1"); $num_rows = mysql_num_rows($result); 如果 ($num_rows > 0) { // 做一点事 } 别的 { // 做其他事情 }如果您的记录已经存在,您将获得一个结果,该结果超过 0 个,因此它可以工作,但可能来自您的 SQL-Server 的流量较少。
【讨论】:
您可以将数据库中的特定列设置为主键,然后仅当您还没有记录时插入才会成功。 这样,您就不需要检查记录是否存在。
【讨论】:
您不需要在 PHP 中执行此操作,您可以直接在数据库的 SQL 查询中执行此操作(我假设您正在使用数据库来记录记录,因为这听起来像您的问题,并且我会假设 MySQL,因为它经常与 PHP 一起使用)。
INSERT INTO ... ON DUPLICATE KEY UPDATE;
如果新行不存在,则插入新行,如果存在则更新当前行,假设您的表具有主键。
有关更多信息,请参阅MySQL Manual。
另一种选择是先执行SELECT COUNT(1) FROM myTable WHERE ... 查询,然后仅在结果为 0 时执行插入,否则执行更新。
【讨论】:
你也可以试试this
INSERT ... ON DUPLICATE KEY UPDATE
【讨论】:
如果您知道如何执行 SQL SELECT,请执行此操作:
$result = mysql_query("SELECT * FROM table1 WHERE something");
$num_rows = mysql_num_rows($result);
if ($num_rows > 0) {
// do something
}
else {
// do something else
}
更好的是,不要在 PHP 中这样做,使用 INSERT ... ON DUPLICATE KEY UPDATE。
【讨论】:
您可以对该记录进行选择并检查结果,或者您可以尝试更新并查看是否有错误。如果有,那么就没有什么可更新的了,所以插入一个。
【讨论】:
计算符合您条件的记录?
select count(*) from foo where id = 5
if($count > 0) {
// record exists
...
}
【讨论】: