У меня есть код ниже, который работает идеально. Что я хочу сделать, это проверить refNo сначала, чтобы увидеть, есть ли дубликаты записей в MySQL. Если затем появляется предупреждающее сообщение, в противном случае появляется сообщение «ОК». Как я могу сделать это с PDO? Любая помощь?
(include("db.php"));
$SQLquery = "INSERT INTO mydatabase (refNo, name)
VALUES ('".$_POST["refNo"]."', '".$_POST["name"]."');";
$STH = $dbc->query($SQLquery);
?>
редактировать: Привет, ребята,
Я предпочитаю не добавлять первичные ключи. Есть ли другой путь?
Если вы хотите сделать это без использования ограничения уровня базы данных, вам нужно будет сделать дополнительный оператор 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
}
Установите 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, если вставка прошла успешно, так как кажется, что вы отредактировали свой вопрос, так как вы разместили его для получения дополнительной информации.