PHP MySQL PDO дублирует

У меня есть код ниже, который работает идеально. Что я хочу сделать, это проверить refNo сначала, чтобы увидеть, есть ли дубликаты записей в MySQL. Если затем появляется предупреждающее сообщение, в противном случае появляется сообщение «ОК». Как я могу сделать это с PDO? Любая помощь?

(include("db.php"));
$SQLquery = "INSERT INTO mydatabase (refNo, name)
VALUES ('".$_POST["refNo"]."', '".$_POST["name"]."');";

$STH = $dbc->query($SQLquery);

?>

редактировать: Привет, ребята,
Я предпочитаю не добавлять первичные ключи. Есть ли другой путь?

2

Решение

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

— это будет выглядеть примерно так; Я не знаком с PDO, но структура должна быть такой же

$selectQuery = "SELECT * FROM mydatabase
WHERE refno = '".$_POST["refNo"]."'";
$res = $dbc->query( $selectQuery );
if( $res->count() > 0 ) {
// this result already exists; show error
}
else {
// this result is new; put the insert query here
}
0

Другие решения

Установите refNo в качестве первичного ключа. Вы также можете создать его как уникальный, но это противоречит цели — ваш ссылочный номер является уникальным основным идентификатором. Идеальный выбор для первичного ключа.

Далее, измените ваш запрос

try {
$SQLquery = "INSERT INTO mydatabase (refNo, name) VALUES (:refNo, :name)";
$SQLquery = $dbc->prepare($SQLquery);
$SQLquery->bindValue(':refNo', $_POST['refNo']);
$SQLquery->bindValue(':name', $_POST['name']);
$SQLquery->execute();
} catch (Exception $e) {
die("Insert error");
}

$count = $SQLquery->rowCount();

if ($count == 1) {
echo "Record added!";
}

Это связывает значение post, чтобы предотвратить внедрение SQL.

Редактировать: Вы мог следить за этим с $count = $SQLquery->rowCount(); который будет равен 1, если вставка прошла успешно, так как кажется, что вы отредактировали свой вопрос, так как вы разместили его для получения дополнительной информации.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector