[英]Check if Record Exists
如果您知道如何執行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擴展:
當我不需要記住記錄的舊值時,我發現這個方法很有用。 例如,如果要增加值,則此方法不是一種很好的方法,因為還要刪除舊記錄和舊值。
請記住,您還需要具有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.