【问题标题】:MySQL checking if string exist and updating or creatingMySQL 检查字符串是否存在并更新或创建
【发布时间】:2014-06-11 10:38:04
【问题描述】:

我正在尝试通过 php 对 MySQL 进行简单的if exist 检查,然后如果不存在,我将创建一个字符串;或者如果存在字符串,我将更新并添加到值counter = counter + 1

但现在我不知道为什么什么都没发生:s

我做错了什么---我已经搜索过问题但我没有找到任何东西..

谢谢

这是代码

$rankset = '';
$steamid64 = "76561198070477917";
$localmap = "de_dolls";

mysql_connect("localhost", "######", "###############") or die(mysql_error());  
mysql_select_db("server") or die(mysql_error());

$check1 = mysql_query("SELECT * FROM `darkrp_missingmap` WHERE map = '$localmap'") or die(mysql_error());

while($info1 = mysql_fetch_array( $check1 )) 
{ 
  if(mysql_num_rows($info1) == 0) {
    print "existiert nicht wird erstellt...";
    mysql_query("SELECT server INSERT INTO darkrp_missingmap (map, count) VALUES ('$localmap', '1')");
  } 
  else {
    print "existiert wird aufgestuft...";
    mysql_query("SELECT server UPDATE darkrp_missingmap SET count = count + 1 WHERE map = '$localmap'");
  }
} 

【问题讨论】:

  • 你需要更新语句而不是这个 SELECT server INSERT INTO darkrp_missingmap (map, count) VALUES ('$localmap', '1'

标签: php mysql database phpmyadmin


【解决方案1】:

mysql_num_rows() 将资源对象作为参数,这是您的 $check1,而您将数组 $info1 传递给它。

你应该这样做:

$check1 = mysql_query("SELECT * FROM `darkrp_missingmap` WHERE map = '$localmap'") or die(mysql_error());

if (mysql_num_rows($check1) === 0) {
    #no records found
    print "existiert nicht wird erstellt...";
    #rest of your code
} else if (mysql_num_rows($check1) === FALSE) {
    #query failed
} else {
    #records found
    print "existiert wird aufgestuft...";
    #rest of your code
}

您应该小心使用==0,因为mysql_num_rows() 在失败时返回FALSE,这也可以与0 进行粗略的比较。

注意:

Please, don't use mysql_* functions in new code。它们不再维护and are officially deprecated。看到red box?改为了解 prepared statements,并使用 PDOMySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial

【讨论】:

  • 那么,如果==0 错了,为什么不向他展示正确的方式呢?
  • @SecondRikudo 我本来想这样做,但我不能 100% 确定他是在检查查询失败还是没有记录。如果不是使用不同的语言,我可以假设 print 语句。无论如何,我认为值得指出。
  • 谷歌翻译告诉我“existiert nicht”的意思是“不存在”。所以我猜===是合适的。
【解决方案2】:

你可以试试这个,你可以参考[this]

$check1 = mysql_query("SELECT * FROM `darkrp_missingmap` WHERE map = '$localmap'") or die(mysql_error());
$nums = mysql_num_rows($check1);

if($nums == 0) {
 // do something
}

或者你可以使用这个sql。

SELECT COUNT(*) AS count FROM `darkrp_missingmap` WHERE map = '$localmap'

并得到这个查询的结果count

$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$nums = $row[0]['count'];

【讨论】:

    【解决方案3】:

    我不认为你一次选择并插入,你也不需要那个 试试这个

    if(mysql_num_rows($info1) >0) {
    
    print "existiert nicht wird erstellt...";
    mysql_query("INSERT INTO darkrp_missingmap (map, count) VALUES ('$localmap', '1')");
    
    } else {
    
    print "existiert wird aufgestuft...";
    mysql_query("UPDATE darkrp_missingmap SET count = count + 1 WHERE map = '$localmap'");
    }
    

    试试这个然后告诉

    【讨论】:

    • 是的,我知道我已经在 phpmyadmin 上尝试了一些代码,是的,这对这件事很有帮助 :) 但总是谢谢你 :)
    【解决方案4】:

    好的,我发现了我的问题,我已经选择了数据库“服务器”,然后我试着做这个 插入darkrp_missingmap(map, count) 值('zu_kotze', '100')

    这里是工作示例: $steamid64 = "76561198070477917"; $localmap = "de_dollsw";

    mysql_connect("localhost", "####", "##########") or die(mysql_error());  
    mysql_select_db("server") or die(mysql_error());
    //maplog
    
    $check1 = mysql_query("SELECT * FROM `darkrp_missingmap` WHERE map = '$localmap'") or die(mysql_error());
    $nums = mysql_num_rows($check1);
    
    if($nums == 0) {
    print "existiert nicht wird erstellt...";
    mysql_query("INSERT INTO darkrp_missingmap (map, count) VALUES ('$localmap', '1')");
    } else {
    print "existiert wird aufgestuft...";
    mysql_query("UPDATE darkrp_missingmap SET count = count + 1 WHERE map = '$localmap'");
    }   
    

    【讨论】:

      猜你喜欢
      • 2017-10-31
      • 2018-05-21
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2020-04-10
      • 2011-04-10
      • 1970-01-01
      相关资源
      最近更新 更多