2014-01-30 3 views
0

я шлю запрос на запись к этому коду:добавить MySQL строка, если идентификатор пользователя не существует в таблице

$name = (string)$_POST['name']; 
$id = (int)$_POST['id']; 

$query = "INSERT INTO Users (name, userID) VALUES ('$name', '$id')"; 


$result = mysqli_query($link,$query); 

, который работает хорошо, и это добавляет строку в таблицу. Как я могу проверить, все ли пользовательские идентификаторы все готовы в одной из следующих строк?

+0

http://stackoverflow.com/questions/ 1361340/how-to-insert-if-not-exist-in-mysql? Rq = 1 – AmazingDreams

+0

Сначала вы выбираете, если строка существует, вы не вставляете ее. – Tan

+0

используйте уникальный ключ в столбце «id» в таблице ваших пользователей. MySQL не позволит вам вставлять повторяющиеся строки. – popi

ответ

1

Делают это, как этот

$query = "SELECT COUNT(*) FROM Users WHERE userID = '$id'"; 

$result = mysqli_query($link,$query); 

if (mysqli_fetch_assoc($result)) { 
    $message = "Already exists"; 
} else { 
    $query = "INSERT INTO Users (name, userID) VALUES ('$name', '$id')"; 
    $result = mysqli_query($link,$query); 
} 
+1

Является ли производительность 'count (*)' и 'fetch' выше, чем' mysqli_num_rows'? –

+0

Ашраф прав. также мы можем использовать ограничение 1 и найти, что результат существует или нет, он также сократит время обработки. вы видели мой ответ –

+0

@SatishSharma Да, я согласен с Ashraf .. и да, я видел ваш ответ. – zzlalani

0

Если вы правильно установить «идентификатор» в качестве первичного ключа или уникального ключа в вашей таблице, вы можете использовать модификатор IGNORE в запросе вы не получите ошибку при вы пытаетесь создать дубликат. Выполнение этого приведет к тому, что строка будет вставлена ​​только в том случае, если значение первичного ключа еще не было в таблице.

$query = "INSERT IGNORE INTO Users (name, userID) VALUES ('$name', '$id')"; 

Если вы не установили первичный ключ в таблице вы должны сделать запрос SELECT, чтобы узнать, если строка с таким идентификатором уже в вашей таблице.

0

Сделайте идентификатор пользователя уникальным ключом. Если он уже существует, ваш код выдает ошибку, и строка не будет введена.

alter table Users 
    add unique index Unique_user (userID (8000)) 
+0

Это не на самом деле бросает ошибку. Просто предупреждение! И вы не можете иметь уникальный индекс такого размера. –

1

Попробуйте

$name = (string)$_POST['name']; 
$id = (int)$_POST['id']; 

$res = mysqli_query($link, "SELECT * FROM Users WHERE userID = '$id' LIMIT 1 "); 
if($row = mysqli_fetch_assoc($res)) 
{ 
    echo "this user id is already exists"; 
} 
else 
{ 
    $query = "INSERT INTO Users (name, userID) VALUES ('$name', '$id')"; 
    $result = mysqli_query($link,$query); 
    echo "record inserted successfully "; 
} 

ПОМНИТЕ: всегда использовать LIMIT 1 когда вы пытаетесь получить ровно один результат.

0

Перед установкой значения в таблице, проверьте, существует ли следующий идентификатор пользователя в таблице или нет

Вы можете сделать это таким образом

$name = $_POST['name']; 
    $id = $_POST['id']; 
    $sql = "SELECT * FROM Users WHERE userID = '$id'"; 
    $res= mysqli_query($sql); 
    $num = mysqli_num_rows($res); 
    if($num == 0) 
    { 
    $query2 = "INSERT INTO Users (name, userID) VALUES ('$name', '$id')"; 
    $result2 = mysqli_query($query2); 
    echo "record inserted successfully "; 
    } 
    else 
    { 
    echo "Record Failed !!"; 
    } 
Смежные вопросы