php =插入工作但想要检查数据库是否已基于一个字段

时间:2011-11-15 04:24:45

标签: php

有一个我正在发布新闻文章的工作系统。我有时会添加相同的两次,并希望避免这种情况。那么如何更改我的insert语句以首先检查名为'title'的字段上的匹配项,看它是否等于我在我尝试提交的记录中的标题?

这是我使用的PHP代码,因为它是为我做的,因为我是一个PHP新手但我不知道如何检查title = title然后如果找到它就不添加它或者如果它添加它没找到匹配:

$result = mysql_query("
insert into news (
     catalogid,
     title,
     intro,
     content,
     viewnum,
     adddate,
     rating,
     ratenum,
     source,
     sourceurl,
     isdisplay,
     isfeature,
     subip,
     vsent,
     timesubmitted) 
values             
     ('1',
     '$title',
     '$intro',
     '$content',
     '0',
     '$subdate',
     '$source',
     '$icheck',
     'N/A',
     '$sourceurl',
     '$isapp',
     '0',
     '127.0.0.1',
     '0',
     '$tsdate')"
); 

谢谢!

4 个答案:

答案 0 :(得分:2)

有一些特定于数据库的技巧,例如on duplicate key update,但通常只需通过select测试是否存在具有相同键的记录。如果记录存在,则使用新数据update,否则您insert新记录。

答案 1 :(得分:1)

您可以在插入之前运行检查查询,例如:

$sql = mysql_query("SELECT catalogid from news WHERE title='".$yourTitle."'");
 if(mysql_num_rows($sql) < 1) {
     //add your insert query here
 }

希望有所帮助

答案 2 :(得分:-1)

$result = mysql_query("SELECT * FROM news WHERE `title`=$title");
if (!$result)
{
   // your code INSERT
   $result = mysql_query("
insert into news (
     catalogid,
     title,
     intro,
     content,
     viewnum,
     adddate,
     rating,
     ratenum,
     source,
     sourceurl,
     isdisplay,
     isfeature,
     subip,
     vsent,
     timesubmitted) 
values             
     ('1',
     '$title',
     '$intro',
     '$content',
     '0',
     '$subdate',
     '$source',
     '$icheck',
     'N/A',
     '$sourceurl',
     '$isapp',
     '0',
     '127.0.0.1',
     '0',
     '$tsdate')"
); 

}

答案 3 :(得分:-1)

您不能使用单个INSERT语句执行此操作,至少不能直接执行此操作。如果将数据库表中的title字段设置为UNIQUE,则可以阻止MySQL插入具有重复标题的记录。您将需要检测mysql_query函数是否返回FALSE;如果是这样,你知道插入了重复的记录,你可以处理这个,但你觉得合适。