2017-02-12 159 views
0

所以我一直试图排除这个问题了一段时间,但一直无法弄清楚,如果我必须通过SQL端或PHP端做到这一点。PHP检查字符串是否在表

我的代码至今:

<?php 
$servername=""; 
$username = ""; 
$password = ""; 
$dbname = "alphacre_kingsland";  


$conn = mysqli_connect($servername, $username, $password, $dbname); 
    if (!$conn) { 
      die("Connection failed: " . mysqli_connect_error()); 
    } 

    $sql = "SELECT * FROM `bm_player_bans` ORDER BY id"; 
    $result = mysqli_query($conn, $sql); 

    if (mysqli_num_rows($result)>0){ 
     while($row = mysqli_fetch_assoc($result)){ 
      $playerId = bin2hex($row['player_id']); 
      $storedname= getPlayerName($playerId); 
      $sql = "INSERT INTO bm_onlinedata (uuid, playername) VALUES ('".$playerId."', '".$storedname."')"; 

      if ($conn->query($sql) === TRUE) { 
       echo "New record created successfully"; 
       } else { 
        echo "Error: " . $sql . "<br>" . $conn->error; 
       } 
      } 
    }else{ 
     echo "0 results"; 
    } 

      mysqli_close($conn); 

    function getPlayerName($uuid){ 
     $json_response = file_get_contents("https://sessionserver.mojang.com/session/minecraft/profile/".$uuid); 
     $data = json_decode($json_response); 
     return $data->name; 
    } 

>

所以这店 “UUID” 和playername到一个单独的表。但是我想检查在添加新UUID之前UUID是否已经在那里。基本更新它。 这是因为玩家名称可以更改。而且我不想要多行相同的数据。但是那只是如果它的存在。

背景信息: 我正在通过Mojangs API从用户那里获取用户名,它只允许每分钟查找一次该UUID。所以我想要每5分钟获取一次数据,使用运行这个脚本的计划任务并将其存储在一个表中。

+0

检查你需要一个'WHERE'条款,以增加'SELECT'为'num_rows'工作。 –

+0

您可以使用'INSERT .. ON DUPLICATE KEY UPDATE ..'语法。 –

回答

1

您可以轻松地选择

$sql = "SELECT * FROM `bm_player_bans` ORDER BY id"; 
$result = mysqli_query($conn, $sql); 

if (mysqli_num_rows($result)>0){ 
    while($row = mysqli_fetch_assoc($result)){ 
     $playerId = bin2hex($row['player_id']); 
     $storedname= getPlayerName($playerId); 
     $sql = "SELECT * FROM `bm_onlinedata` where uuid = '" . $playerId ."';"; 
     $result = mysqli_query($link, $sql); 
     $num_rows = mysqli_num_rows($result); 
     if ($num_rows> 0) { 
      $sql = "UPDATE bm_onlinedata 
        set playername = '". $storedname."' 
        where uuid = '" .$playerId ."';"; )"; 
     } else { 
     $sql = "INSERT INTO bm_onlinedata (uuid, playername) VALUES ('".$playerId."', '".$storedname."')"; 

      if ($conn->query($sql) === TRUE) { 
       echo "New record created successfully"; 
       } else { 
        echo "Error: " . $sql . "<br>" . $conn->error; 
       } 
     } 
    } 
}else{ 
    echo "0 results"; 
} 
+0

你的“and”在某处的使用似乎有问题,我会看看我是否可以把它整理出来 – DarkEyeDragon

+0

@DarkEyeDragon。我不使用和在查询中..因为似乎不需要 – scaisEdge

+0

我尽管如此,仍然似乎没有工作,它不断增加一行,而不是更新它 – DarkEyeDragon

相关问题