Как проверить, существует ли запись, прежде чем создавать новую запись?

Я пытаюсь внедрить дублирующую систему блокировки тем в скрипт форума. Так как я очень плохо разбираюсь в PHP, хотя, возможно, вы хотели бы мне помочь. К сожалению, я даже не уверен, что пытаюсь редактировать правую часть скрипта, но вот код:

// If it's a new topic
if ($fid)
{
$subject = pun_trim($_POST['req_subject']);

if ($pun_config['o_censoring'] == '1')
$censored_subject = pun_trim(censor_words($subject));

if ($subject == '')
$errors[] = $lang_post['No subject'];
else if ($pun_config['o_censoring'] == '1' && $censored_subject == '')
$errors[] = $lang_post['No subject after censoring'];
else if (pun_strlen($subject) > 70)
$errors[] = $lang_post['Too long subject'];
else if ($pun_config['p_subject_all_caps'] == '0' && is_all_uppercase($subject) && !$pun_user['is_admmod'])
$errors[] = $lang_post['All caps subject'];
}

Поэтому я пытаюсь реализовать, если $ при условии существует в БД (ВЫБЕРИТЕ * ИЗ ТЕМ, ГДЕ ТЕМА), покажите ошибку в этом формате: $ errors [] = $ lang_post [‘Тема уже существует’];

Спасибо.

-1

Решение

Есть несколько способов получить информацию о том, находится она в базе данных или нет (здесь я использую PDO)

Это общий код:

$conn = new PDO('mysql:dbname=db_name', 'username', 'password')
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

выборка -> (PDO :: FETCH_NUM)

$sql = $conn->prepare("query_to_db");
$sql->execute();
$rows = $sql->fetch(PDO::FETCH_NUM);
if( $row > 0 ){
echo "the credentials exists";
}
else{
// there is nothing like this in the database
}

MySQL код ошибки 23000

try{
// connection code above mentioned
$sql = $conn->prepare("query_to_db");
$sql->execute();
}
catch(PDOException $e){
if($e->getCode() == 23000){
// the credentials exists
}
else{
// doesn't exists
}
}

ROWCOUNT ()

$sql = $conn->prepare("query_to_db");
$sql->execute();

$count = $sql->rowCount();
if($rowCount > 0){
//exists in the db
}
else{
//it doesn't exists in the db
}

Но rowCount не в MySQL
Доктор php говорит:

Для большинства баз данных PDOStatement :: rowCount () не возвращает количество строк, затронутых оператором SELECT. Вместо этого используйте PDO :: query (), чтобы выдать инструкцию SELECT COUNT (*) с теми же предикатами, что и предполагаемый оператор SELECT, а затем используйте DOStatement :: fetchColumn (), чтобы получить количество строк, которые будут возвращены. Ваше приложение может затем выполнить правильное действие.

Я лично предпочитаю fetch->(PDO::FETCH_NUM) как это точнее, чем другие.

1

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

Других решений пока нет …

По вопросам рекламы [email protected]