【问题标题】:Search MySQL database if entry found and display it, if not, add it搜索 MySQL 数据库,如果找到并显示它,如果没有,添加它
【发布时间】:2014-05-15 17:46:01
【问题描述】:

我是 PHP 和 MySQL 的新手。我知道有很多类似的主题,但我似乎找不到与我的问题有关的主题。

目前,我的数据库中有一个名为“movies”的表。我有一个搜索表单来搜索该表中的电影。我正在使用下面的代码从我的数据库中获取信息并显示它。

$query = "SELECT * FROM movies WHERE titleid='$urlid'";
$result = $con->query($query);
if( !$result ) {
die('Query failed!<br>'.$con->error);
}
if( $result->num_rows == 0 ) {

}
while( $row = $result->fetch_assoc() ) {
echo $row['id'];
echo $row['title']; //this is not all of the columns just an example
}

我想做的是: 如果 $urlid 与 'titleid' 不匹配,那么我想将其添加到数据库中。目前我正在使用下面的代码添加一个条目:

$query = "INSERT IGNORE INTO movies (id, aka, ratio, budget, cast, fullcast, linkcast, castcharacter, linkcastcharacter, company, linkcompany, description, directors, linkdirectors, genre, mpaa, synopsis, poster, rating, releasedate, runtime, sound, officialsites, tagline, title, trailerlink, titleid, year)
VALUES (NULL, '$aka', '$ratio', '$budget', '$cast', '$fullcast', '$linkcast', '$castcharacter', '$linkcastcharacter', '$company', '$linkcompany', '$description', '$directors', '$linkdirectors', '$genre', '$mpaa', '$synopsis', '$poster', '$rating', '$releasedate', '$runtime', '$sound', '$officialsites', '$tagline', '$title', '$trailerlink', '$urlid')";


mysqli_query($con, $query);

我如何将它们组合起来,如果记录不存在,它会添加它,然后显示它添加的信息?

谢谢 李

【问题讨论】:

    标签: php sql select mysqli sql-insert


    【解决方案1】:
    $query = "SELECT * FROM movies WHERE titleid='$urlid'";
    $result = $con->query($query);
    if( !$result ) {
    die('Query failed!<br>'.$con->error);
    }
    if( $result->num_rows == 0 ) {
        $addQuery = "*your query here*";
        $con->query($query);
        echo "Movie added."
    } else {
    while( $row = $result->fetch_assoc() ) {
    echo $row['id'];
    echo $row['title']; //this is not all of the columns just an example
    }
    }
    

    如果没有行,这将添加它,否则显示结果。

    【讨论】:

    • OP 想要合并,也不想合并。 OP想要添加,如果缺少并且仍然显示..来自现有或添加。
    【解决方案2】:

    只是补充: 如果您的值与“电影”表中的顺序相同,那么您可以使用最短的方式:

    $query = "INSERT IGNORE INTO movies VALUES (
                NULL, '$aka', '$ratio', '$budget', '$cast', '$fullcast', '$linkcast', '$castcharacter', '$linkcastcharacter', '$company',
               '$linkcompany', '$description', '$directors', '$linkdirectors', '$genre', '$mpaa', '$synopsis', '$poster', '$rating',
               '$releasedate', '$runtime', '$sound', '$officialsites', '$tagline', '$title', '$trailerlink', '$urlid')";
    
    mysqli_query($con, $query);
    

    【讨论】:

      【解决方案3】:

      您可以插入然后再次选择,如以下代码:

      $query = "SELECT * FROM movies WHERE titleid='$urlid'";
      $result = $con->query($query);
      if( !$result ) {
          die('Query failed!<br>'.$con->error);
      }
      if( $result->num_rows == 0 ) {
          $insert_query = "INSERT IGNORE INTO movies (id, aka, ratio, budget, cast, fullcast, linkcast, castcharacter, linkcastcharacter, company, linkcompany, description, directors, linkdirectors, genre, mpaa, synopsis, poster, rating, releasedate, runtime, sound, officialsites, tagline, title, trailerlink, titleid, year)
          VALUES (NULL, '$aka', '$ratio', '$budget', '$cast', '$fullcast', '$linkcast', '$castcharacter', '$linkcastcharacter', '$company', '$linkcompany', '$description', '$directors', '$linkdirectors', '$genre', '$mpaa', '$synopsis', '$poster', '$rating', '$releasedate', '$runtime', '$sound', '$officialsites', '$tagline', '$title', '$trailerlink', '$urlid')";
          mysqli_query($con, $insert_query);
      
          $result = $con->query($query);
          if( !$result ) {
              die('Query failed!<br>'.$con->error);
          }   
      }
      while( $row = $result->fetch_assoc() ) {
      echo $row['id'];
      echo $row['title']; //this is not all of the columns just an example
      }
      

      另外,我注意到您的 INSERT 语句可能不正确。缺少 $year 的值部分。

      【讨论】:

      • 没有评论就被否决了?我的代码没有工作,有问题吗?
      • 感谢 nawed,这非常有效。我现在正在努力计算页面被查看的次数。我已将 'views' 列添加到我的表 'movies' 中,每次使用上述代码查看页面时如何增加 + 1?我试过 $updateviews = "INSERT INTO movies SET views=1 WHERE id=$id ON DUPLICATE KEY UPDATE views=views+1 ;"; mysqli_query($con, $updateviews);但它什么也没做。
      • ON DUPLICATE KEY UPDATE 仅在行/数据/记录已经存在时触发。在您的代码中,由于没有记录,因此执行了 INSERT。这意味着 DUPLICATE 永远不会发生,因此 UPDATE 永远不会发生。无论记录已经存在还是您刚刚插入...在开始循环之前执行 UPDATE 查询。只需执行 UPDATE 语句并设置 views=views+1。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 2021-02-26
      相关资源
      最近更新 更多