簡體   English   中英

檢查記錄是否存在

[英]Check if Record Exists

在php.net上發現了這個以檢查文件是否存在。

我想首先檢查記錄是否存在,然后進行更新,否則進行插入。

if(record exist) {
   update query}
else 
  { insert query}

我知道如何更新或插入,但不知道如何檢查記錄是否存在。 怎么做?

如果您知道如何執行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

您不需要在PHP中執行此操作,您可以直接在數據庫的SQL查詢中執行此操作(我假設您正在使用數據庫進行記錄,因為這就是您的問題所聽到的內容,而我我會假設MySQL,因為它經常與PHP一起使用)。

INSERT INTO ... ON DUPLICATE KEY UPDATE;

如果新行尚不存在,則會插入新行,如果存在,則會更新當前行,假設您的表具有主鍵。

有關詳細信息,請參閱MySQL手冊

另一種選擇是首先執行SELECT COUNT(1) FROM myTable WHERE ...查詢,然后僅在結果為0時執行插入,否則執行更新。

你也可以試試這個

INSERT ... ON DUPLICATE KEY UPDATE

我會推薦Dominic Rodger的解決方案,但稍加改動就能讓它變得更快。 您應該選擇一個值而不是一行。

$result = mysql_query("SELECT key FROM table1 WHERE something LIMIT 1");
$num_rows = mysql_num_rows($result);

if ($num_rows > 0) {
  // do something
}
else {
  // do something else
}

如果您的記錄已經存在,您將得到一個結果,結果超過0,因此它可以正常工作,但可能會減少來自SQL-Server的流量。

$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
}

計算符合條件的記錄?

select count(*) from foo where id = 5

if($count > 0) {
    // record exists
    ...
}

奇怪沒有人提到過使用REPLACE?

我遇到了同樣的問題,我解決了使用REPLACE INTO,這是一個以這種方式工作的MySQL擴展:

  • 如果您要插入的記錄不存在,則MySQL REPLACE會插入新記錄。
  • 如果您要插入的記錄已存在,則MySQL REPLACE首先刪除舊記錄,然后插入新記錄

當我不需要記住記錄的舊值時,我發現這個方法很有用。 例如,如果要增加值,則此方法不是一種很好的方法,因為還要刪除舊記錄和舊值。

請記住,您還需要具有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();

您可以對該記錄執行選擇並檢查結果,或者您可以嘗試更新並查看是否存在錯誤。 如果有,那么沒有更新,所以插入。

您可以將數據庫中的特定列設置為主鍵,然后只有在您沒有記錄時插入才會成功。 這樣,您不需要檢查記錄是否存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM