Двойные данные на 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";
    }
}

Добро пожаловать в стек переполнения! Этот фрагмент кода выглядит хорошо, однако у меня есть два предложения, которые вы можете рассмотреть:

  1. Вы не предоставили закрытие } после вашего кодового блока. Не уверен, что вы просто не скопировали его или его не существует. Убедитесь, что у вас есть закрывающая фигурная скобка для вашего if заявление!
  2. Ваши запросы MySQL не могут быть экранированы, если вы не отключите их. Представьте, что одна из переменных в вашем коде MySQL имеет закрывающую кавычку (') - они могут связываться с вашим оператором MySQL и вставлять вредоносный код. Это называется "MySQL инъекция", и это очень распространено. Попробуйте исследовать это и, возможно, загляните в эту полезную функцию mysqli.
Другие вопросы по тегам