2015-03-04 6 views
0

Первого раза я размещаю на StackOverflowПроверьте, пользователя уже существует

Я хочу, если STEAMID получить по API уже существует в столбце «steamID64», ничего не делать. Но если это не ВСТАВИТЬ новое в Steamid же колонке

Вот то, что я кодированной:

<?php 
    if(isset($_SESSION['steamid'])) { 

     include ('steamauth/userInfo.php'); //access steam informations 

     $ID64 = $steamprofile['steamid']; 


     $link = mysql_connect('xxx','xxx', 'xxx', 'xxx'); 

     $query = "SELECT steamID64 FROM Users WHERE steamID64=".$ID64; 
     $result = mysql_query($query, $link); 
     $rowcount = mysql_num_rows($result); 

     if($rowcount == 0) 
     { 
      $newUser = "INSERT INTO Users SET steamID64='$ID64'"; 
      mysql_query($newUser, $link); 
      mysql_free_result($result); 
     else 
     { 
      echo "User already exist"; //only for debug purpose 
     } 

     mysql_close($link); 
    } 
?> 

Дело в том, что он запустить еще, но мой стол Пользователи пуст Так где же я неправильно ? 0_о

Я знаю, что этот вопрос уже задавали, но я уже судимое все, что я нашел

ответ

1

Вы могли бы попытаться увидеть, если запрос на самом деле работает или выдает ошибку, делая это:

$query = "SELECT steamID64 FROM Users WHERE steamID64='".$ID64."'"; 
$result = mysql_query($query, $link) or die (mysql_error($link)); 
$rowcount = mysql_num_rows($result); 

Запрос вставки тоже неправильно, он должен быть:

$newUser = "INSERT INTO Users (steamID64) VALUES ('".$ID64.'")"; 

Во всяком случае, вы должны попробуйте использовать подготовленный отчет PDO или Mysqli для предотвращения SQL-инъекций, поскольку mysql_ устарели и небезопасны.

UPDATE

Перед использованием mysqli_ пожалуйста, прочитайте документацию на http://php.net/manual/en/book.mysqli.php

Во всяком случае, используя mysqli_ код будет так:

$ID64 = $steamprofile['steamid']; 
$link=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME); 
$_selectQuery="SELECT steamID64 FROM Users WHERE steamID64=?"; 
$_select=$link->prepare($_selectQuery); 
$_select->bind_param('s',$ID64); 
if($_select->execute()) { 
    $_select->store_result(); 
    $rowcount=$_select->num_rows; 
    if($rowcount==0) { 
     $_select->free_result(); 
     $_insertQuery="INSERT INTO Users (steamID64) VALUES (?)"; 
     $_insert=$link->prepare($_insertQuery); 
     $_insert->bind_param('s',$ID64); 

     if($_insert->execute()) { 
      //NEW RECORD INSERTED 
     } else { 
      echo $link->error; 
     } 
     $_insert->free_result(); 
    } else { 
     //DUPLICATE ENTRY 
    } 
} else { 
    echo $link->error; 
} 

P.S. Я использую объектно-ориентированные функции mysqli_

mysqli->execute() возвращает значение TRUE, если заявление преуспели, в противном случае он вернет FALSE, но, во всяком случае, в случае INSERT, UPDATE или DELETE в mysqli объекта будет также содержать affected_rows недвижимость , который представляет количество строк, на которые влияет оператор.
Итак, даже если работает execute, вы можете проверить, сколько строк было фактически вставлено.

+0

Я сказал, что ни одна база данных не выбрана, а в mysql_connect. У меня есть моя база данных в четвертом аргументе и как она будет выглядеть в mysqli? – Maarethyu

+0

Возможно, вы ошибочно указали имя базы данных или забыли создать ее. Посмотрите на обновленный ответ, чтобы увидеть пример использования mysqli_. – CapitanFindus

+0

Сценарий работает хорошо, но когда INSERT выполняется, echo в if ($ _insert-> execute) не выполняется вообще, я не знаю, почему ^^ – Maarethyu

0

Предполагая, что ваша таблица имеет только одно поле, изменить свой код на этот:

$newUser = "INSERT INTO Users(steamID64) VALUES('".$ID64."')"; 

Однако, я бы рекомендуем посмотреть в PDO, поскольку это доступно для атаки SQL-инъекций.

При необходимости, пожалуйста, вставьте другие поля вместе с steamID64.

Смежные вопросы