-1

我正在从 Crunchbase API 中提取数据并添加到数据库中。

我不确定对于两家公司、人员或其他人来说最好的唯一标识符是什么,但我认为永久链接可以作为 id 使用。

我的问题是如何检查是否已添加条目,如果已​​添加,则更新/替换数据,如果永久链接不存在,则将下一行作为新实体添加到表中。

我当前的代码:

<?php
$query = mysql_query("SELECT * FROM companies");
$result = mysql_fetch_assoc($query);
$num = mysql_num_rows($query);

    if($num) // if the record exist, update it
    {
        mysql_query("UPDATE companies SET
            permalink='".$array['permalink']."',
            WHERE `permalink` = '" . $result['permalink'] . "'",$con);
    } 
    else{  
        mysql_query("INSERT into companies SET 
            permalink='".$array['permalink']."'",$con);
    }
    mysqli_close($con);
?>

注意:该表名为“公司”

4

3 回答 3

1

尝试重复键...

mysql_query("INSERT INTO companies SET permalink='".$array['permalink']."' ON DUPLICATE KEY UPDATE permalink=permalink ;
于 2013-11-05T22:50:25.703 回答
0

找到唯一 ID 后,您可以使用以下方法检查记录是否存在:

$query = mysql_query("SELECT COUNT(*) FROM companies WHERE `permalink` = '" . $result['permalink'] . "'");

请注意,我实际上也更改了,因为如果您只想知道某个值是否存在,则选择所有列的效率非常SELECT *

一般来说,我建议您使用一些自动递增的数字字段作为唯一 ID。这是数据库设计中的常见做法,并且有(几个)很好的理由。如果您将一个AUTO_INCREMENT字段添加id到您的表中,您可以这样做

    $query = mysql_query("SELECT id FROM companies WHERE `permalink` = '" . $result['permalink'] . "'");

然后检查你是否得到一个空的结果集。如果没有,请UPDATE使用该 ID ( UPDATE ... WHERE id = $id),否则,请使用INSERT.

顺便说一句,检查语法INSERT,它没有使用SET这种方式UPDATE

最后,我不知道你是如何构造的,但是如果你还没有这样做的话$result["permalink"],请使用mysql_escape_string来防止 SQL 注入。

于 2013-11-05T22:36:56.357 回答
0

尝试重复键...来自手册http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

于 2013-11-05T22:40:24.600 回答