Как создать предупреждение javascript, если запись уже существует ИЛИ, если она не существует в запросе вставки PDO MySQL?

У меня есть база данных MySQL, в которую я хотел бы вставить данные из формы PHP, используя PDO connect.

Есть ли способ получить всплывающее окно предупреждения Javascript, когда;

  1. запись уже существует или
  2. это было добавлено, потому что это не существует

Я использую этот код;

$dbo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$category = $_REQUEST['category'];
$sql = "INSERT INTO category (category) SELECT * FROM (SELECT '".$category."') AS tmp WHERE NOT EXISTS (SELECT category FROM category WHERE category = '".$category."') LIMIT 1;";
$sql = $dbo->prepare($sql);
$sql ->execute(
array(
':category'=>$category
)
);

Спасибо за помощь новичку (я искал существующий ответ, но ничего не казалось достойным одобрения).

1

Решение

На самом деле это довольно просто. Просто проверьте поврежденные строки через ->rowCount():

$sql = "INSERT INTO category (category) SELECT * FROM (SELECT '".$category."') AS tmp WHERE NOT EXISTS (SELECT category FROM category WHERE category = '".$category."') LIMIT 1;";
$stmt = $dbo->prepare($sql);
$stmt->execute(array(':category'=>$category));

if($stmt->rowCount() > 0) {
// inserted
echo '<script>alert("Insert Complete!");</script>';
} else {
// did not insert
echo '<script>alert("Record already exists!");</script>';
}

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

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

2

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

$dbo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$category = $_REQUEST['category'];
$sql = "INSERT INTO category (category) SELECT * FROM (SELECT '".$category."') AS tmp WHERE NOT EXISTS (SELECT category FROM category WHERE category = '".$category."') LIMIT 1;";
$sql = $dbo->prepare($sql);
try {
$sql ->execute(
array(
':category'=>$category
)
);
catch(Exception $ex) {
print_r($ex);
}

Поскольку вы добавили ограничение на свое поле, чтобы оно было уникальным, и попросили PDO обработать ошибку за исключением, PDO должен вызвать исключение при попытке вставить данные, если они уже находятся в БД.
Вместо print_r() ты можешь сделать echo "alert('My error message');"

0

Например, это необходимо преобразовать в PDO, чтобы ответить на вопрос.

// $link = mysqli_connect blah blah

function check_exist($link, $cat) {

$query = "SELECT `category` FROM `category` WHERE `category` = '$cat'";
$result = mysqli_query($link, $query) or die(mysqli_query($link));

$row = mysqli_fetch_num($result);

if(count($row) >= 1) {
<script>alert('Row already exists!');
} else {
insert_record($link, $cat); //fire the insert function
<script>alert('New record added!');
}

}

function insert_record($link, $cat) {
$cat = mysqli_real_escape_string($link, $cat);
$query = "INSERT INTO `category` (`category`) VALUES ('$category')";
mysqli_query($link, $query) or die(mysqli_query($link));
}
0
По вопросам рекламы [email protected]