2013-09-26 6 views
0

У меня есть кнопка формы, которую мне нужно сделать двумя разными способами, исходя из ввода пользователя и того, существует ли этот вход в моей базе данных. Если вход НЕ существует, кнопка создаст новую запись. Если он существует, то существующая запись будет обновлена.PHPMySQL: как определить, существует ли значение в базе данных

Вот мой PDO запрос, как она стоит сейчас:

/* First, we need to discover whether the Proposal No. entered already exists in the 
database. If it doesn't, then a new record will be created. If                    
it does, then an existing record will be updated. */ 
$pNoExists = $con->prepare("SELECT ProposalNo FROM ptfp1"); 
$pNoExists->execute(); 
$row = $pNoExists->fetch(PDO::FETCH_ASSOC); 

Когда я запускаю $ строки = $ pNoExists-> выборки (PDO :: FETCH_ASSOC); через цикл while все значения для поля присутствуют. Теперь мне просто нужно руководствоваться тем, как использовать это при настройке кнопок. Это то, что я хочу сделать:

if($_POST['ButtonPush'] && input doesn't exist) { 
    Create new record; 
} 
else { 
    Update existing record; 
} 

Простой, не так ли? Но это ускользает от меня.

+2

Наличие предложения WHERE в вашем SQL-выражении может помочь, а не извлекать каждое отдельное предложение, а затем зацикливать на PHP: позволить базе данных делать то, что она разработала, чтобы сделать хорошо –

+0

вы можете использовать '$ count = mysqli_num_rows ($ con," SELECT * FROM table WHERE ProposalNo = '$ value' ");' Если '$ count' больше 1, обновите существующий. – Jacques

+0

Почему бы вам просто не использовать 'INSERT' с предложением' ON DUPLICATE KEY UPDATE', чтобы сделать это за один шаг? – Barmar

ответ

0

Учитывая то, что у вас есть, я хотел бы сделать:

if($_POST['ButtonPush'] && array_search($all_values, $input_value)) { 
    Create new 
} 
else { 
    Update 
} 

Однако, как комментарий выше, вы можете просто добавить, где положение в вашей «SELECT» заявление, чтобы вы не захватывая всю базу данных таблица содержание каждый раз. И даже преобразовать SELECT в SELECT COUNT можно, чтобы уменьшить количество запрашиваемых данных.

0

Вы можете использовать SELECT COUNT (*) FROM ptfp1 WHERE ProposalNo =: вход

чем проверить, если значение, которое вы получаете больше, чем один. Если она есть, обновить его:

UPDATE ptfp1 установить ... где ProposalNo =: вход

еще

INSERT INTO ptfp1 (...) VALUES (...)

0

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

INSERT INTO ptfp1 (ProposalNo, colA, colB, colC, ...) 
VALUES (:ProposalNo, :colA, :colB, :colC, ...) 
ON DUPLICATE KEY 
    UPDATE colA = VALUES(colA), colB = VALUES(colB), colC = VALUES(colC), ... 

Documentation

+0

Да, это сработает. Благодаря! – Chris

0

Выяснил ответ. Просто используйте вход пользователя (хранится в переменной сеанса) в моем ЗЕЬЕСТ:

$pNoExists = $con->prepare("SELECT ProposalNo FROM ptfp1 WHERE ProposalNo =                                
'".$_SESSION['ProposalNo']."'"); 
$pNoExists->execute(); 
$row = $pNoExists->fetch(PDO::FETCH_ASSOC); 

и кнопки:

if($_POST['ButtonPush'] && !$row['ProposalNo']) { 
    Write new record; 
} 
else { 
    Update existing record; 
} 

Скрытие в виду!