簡體   English   中英

mysql 上的雙數據

[英]double data on 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')");

升級到 mysqli,我會推薦面向對象的語法,因為它更好用。

根據“最小化對數據庫的調用”的最佳實踐,我會將您的三個查詢壓縮為一個統一的 SELECT 調用,然后檢查非 0 結果。

我使用 mysqli 的面向對象語法的未經測試的建議(我確實在 PHPMyAdmin 中測試了 SELECT 查詢):

$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";
$conn = new mysqli("localhost", "root","","dbname");
$stmt = $conn->prepare($query);
$stmt->bind_param("ssss", $dielz, $dielz, $date, $nam);
$stmt->execute();
$stmt->bind_result($tally);
$stmt->fetch();
if (!$tally) {
    $stmt->close();
    // insert qualifying data
    $stmt = $conn->prepare("INSERT INTO pending_media VALUES ('',?,?)");
    $stmt->bind_param("ss", $nam, $dielz);
    if ($stmt->execute()) {
        echo "Insert Query Error"; // $stmt->error;
    }else{
        echo "Success";
    }
}

歡迎使用堆棧溢出! 此代碼片段看起來不錯,但是我有兩個建議您可能需要查看:

  1. 您沒有在代碼塊之后提供結束} 不確定是你沒有復制它還是它實際上不存在。 確保你的if語句有一個右花括號!
  2. 您的 MySQL 查詢可能不會被轉義,除非您將它們刪除。 想象一下,如果您的 MySQL 代碼中的一個變量有一個結束引號 ( ' ) — 它們可能會干擾您的 MySQL 語句並插入惡意代碼。 這被稱為“MySQL 注入”並且非常常見。 試着研究一下,也許看看這個有用的 mysqli 函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM