Двойные данные на MySQL
Я использую оператор php &&, чтобы выбрать несколько данных, чтобы избежать дублирования в mysql. Код, который я использую ниже, работает нормально? Есть ли более простое использование операторов PHP?
$date= date('Y/m/d');
$cekcount = mysql_num_rows(mysql_query("SELECT * FROM `pending_media` where `mediaid`='$dielz'"));
$cekcount2 = mysql_num_rows(mysql_query("SELECT * FROM `media` where `mediaid`='$dielz'"));
$selectcount = mysql_query("SELECT * FROM `media` where `date`='$date' AND `uplink`='$nam'");
$cekcount3 = mysql_num_rows($selectcount);
if($cekcount == 0 && $cekcount2 == 0 && $cekcount3 == 0){
mysql_query("INSERT INTO pending_media VALUES('','$nam','$dielz')");
2 ответа
При обновлении до mysqli я рекомендую объектно-ориентированный синтаксис, потому что с ним лучше работать.
В соответствии с лучшими практиками "свести к минимуму количество обращений к базе данных", я сконцентрирую ваши три запроса в одном объединенном вызове SELECT, а затем проверю результат, отличный от 0.
Мое непроверенное предложение с использованием объектно-ориентированного синтаксиса mysqli (я тестировал запрос SELECT в PHPMyAdmin):
$query = "SELECT SUM(tally)
FROM (
SELECT COUNT(*) AS tally
FROM pending_media
WHERE mediaid = ?
UNION ALL
SELECT COUNT(*)
FROM media
WHERE mediaid = ? OR (date = ? AND uplink = ?)
) t";
if (!$conn = new mysqli("localhost", "root","","dbname")) {
echo "Database Connection Error" // $conn->connect_error
} elseif (!$stmt = $conn->prepare($query)) {
echo "Prepare (Select) Syntax Error"; // $conn->error
} elseif (!$stmt->bind_param("ssss", $dielz, $dielz, $date, $nam) || !$stmt->execute() || !$stmt->bind_result($tally) || !$stmt->fetch()) {
echo "Select Statement Error"; // $stmt->error
} elseif (!$tally) {
$stmt->close();
// insert qualifying data
if (!$stmt = $conn->prepare("INSERT INTO pending_media VALUES ('',?,?)")) {
echo "Prepare (Insert) Syntax Error"; // $conn->error; // don't show exact error publicly
} elseif (!$stmt->bind_param("ss", $nam, $dielz) || !$stmt->execute()) {
echo "Insert Query Error"; // $stmt->error;
}else{
echo "Success";
}
}
Добро пожаловать в стек переполнения! Этот фрагмент кода выглядит хорошо, однако у меня есть два предложения, которые вы можете рассмотреть:
- Вы не предоставили закрытие
}
после вашего кодового блока. Не уверен, что вы просто не скопировали его или его не существует. Убедитесь, что у вас есть закрывающая фигурная скобка для вашегоif
заявление! - Ваши запросы MySQL не могут быть экранированы, если вы не отключите их. Представьте, что одна из переменных в вашем коде MySQL имеет закрывающую кавычку (
'
) - они могут связываться с вашим оператором MySQL и вставлять вредоносный код. Это называется "MySQL инъекция", и это очень распространено. Попробуйте исследовать это и, возможно, загляните в эту полезную функцию mysqli.