假设我有一个名为WORD s的表,其中只有一个主键(ID)和一个列单词。WORD列应该是惟一的varchar,ID是一个自动递增的整数字段。
用SQL语言来说,
CREATE TABLE WORDS(
ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
WORD VARCHAR(35) NOT NULL,
UNIQUE(WORD)
);
在浏览PHP中的单词列表时,我想在words表中插入一个新单词。如果它已经存在,我希望什么都不会发生-如果它不存在,我希望它被插入。
我发现最好的解决方法是使用
INSERT IGNORE
。不过,我现在得再往前走一步。。。我的PHP脚本需要知道单词插入表后的主键。如果它还没有出现,这很简单-我可以使用mysql_insert_id
。不过,如果它存在,我似乎必须对表进行查询,以获取该单词的主键已经是什么。有没有一个简单的方法:
“如果还没有,就把这个插到桌子上,然后给我
主键不管是哪种方式。”
有机会吗?
最佳答案
做这件事不容易。但你可以把它简化成一个函数
function wordDB($word) {
$sql = "select * from WORDS where WORD = '".$word."'";
$result = mysql_query($sql);
if($result) { #if exists
while($row = mysql_fetch_array($result)) {
$id = $row['id'];
}
} else { # if doesn't exist
$insertSQL = "insert into WORDS (WORD) values ('".$word."')";
mysql_query($insertSQL);
$id = mysql_insert_id();
}
return $id;
}
这是一个简短的函数,可以完成您基本要求的所有工作。
关于php - MySQL/PHP将新值插入表中(如果尚不存在)并通过两种方式获取其PK,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7786344/