2014-05-05 57 views
0

的MySQL(BLOB)Ive得到了下一個代碼插入NULL使用PHP

if ($_FILES['intrebare_img']['size'] > 0) { 
     $tmpName = $_FILES['intrebare_img']['tmp_name']; 
     $intrebare_img=addslashes(file_get_contents($tmpName)); 
} 
else 
    $intrebare_img = NULL; 
if ($_FILES['opt1_img']['size'] > 0) { 
     $tmpName = $_FILES['opt1_img']['tmp_name']; 
     $opt1_img = addslashes(file_get_contents($tmpName)); 
} 
else 
    $opt1_img = NULL; 
if ($_FILES['opt2_img']['size'] > 0) { 
     $tmpName = $_FILES['opt2_img']['tmp_name']; 
     $opt2_img = addslashes(file_get_contents($tmpName)); 
} 
else 
    $opt2_img = NULL; 

if ($_FILES['opt3_img']['size'] > 0) { 
     $tmpName = $_FILES['opt3_img']['tmp_name']; 
     $opt3_img = addslashes(file_get_contents($tmpName)); 
} 
else 
    $opt3_img = NULL; 
$query = "INSERT INTO intrebari (intrebare_txt, intrebare_img, opt1_txt, opt1_img, opt2_txt, opt2_img, opt3_txt, opt3_img, raspuns_corect) 
       VALUES ('{$intrebare_txt}','{$intrebare_img}','{$opt1_txt}','{$opt1_img}','{$opt2_txt}','{$opt2_img}','{$opt3_txt}','{$opt3_img}','{$rsp_corect}')"; 
mysql_query($query) or die("Error, query failed"); 

執行時它插入在數據庫中的值,唯一的問題是,即使沒有文件選中它插入[BLOB - 0 B]而不是NULL。 我認爲我的問題是由''周圍的NULL值生成的,但無法解決問題。

提前致謝!

+0

這可以通過預處理語句和參數化查詢輕鬆解決。那麼你不需要報價。 –

回答

0

聰明的事情是使用PDO或類似的東西以及準備好的語句。讓PDO盡力解決其他問題並集中精力解決其他問題。它還可以保護您免受您的代碼似乎充滿的SQL注入漏洞。

如果你想堅持折舊的mysql_函數,你需要檢查每個變量並從NULL值中刪除引號。沿着線的東西:

if ($opt3_img !== NULL) { 
    $opt3_img = "'".$opt3_img."'"; 
} 
$query = sprintf('INSERT INTO intrebari SET opt3_img = %s', $opt3_img); 

你會當然也希望把這個功能變成一個功能,避免重複每一個變量,代碼..

+0

坦克回答你的答案戴夫! 我知道代碼充滿了漏洞,我會盡快添加'mysql_real_escape_string'函數。 不幸的是,這是一個學校項目,我們只教mysql_函數。 – Mosfet

0

最終,一個小小的研究後,我已經重寫了代碼,因此它使用了PDO。 下面是結果:

 $dbh = new PDO('mysql:dbname=dbname;host=127.0.0.1', user, password); 
     if ($stmt = $dbh->prepare ("INSERT INTO intrebari (intrebare_txt, intrebare_img, opt1_txt, opt1_img, opt2_txt, opt2_img, opt3_txt, opt3_img, raspuns_corect) 
                  VALUES (:intrebare_txt, :intrebare_img, :opt1_txt, :opt1_img, :opt2_txt, :opt2_img, :opt3_txt, :opt3_img, :rsp_corect)")) 
     { 
      $stmt -> bindParam(':intrebare_txt', $_POST['intrebare_txt']); 
      $stmt -> bindParam(':opt1_txt', $_POST['opt1_txt']); 
      $stmt -> bindParam(':opt2_txt', $_POST['opt2_txt']); 
      $stmt -> bindParam(':opt3_txt', $_POST['opt3_txt']); 
      if (isset ($_POST['rsp_corect'])) 
       $stmt -> bindParam(':rsp_corect',$_POST['rsp_corect']); 
      else 
       echo '<script type="text/javascript">alert("Nu a fost selectat un raspuns valid!");window.location=\'intrebari.php\';</script>'; 
      if ($_FILES['intrebare_img']['size'] > 0) { 
        $tmpName = $_FILES['intrebare_img']['tmp_name']; 
        $stmt -> bindParam(':intrebare_img', file_get_contents($tmpName)); 
      } 
      else 
       $stmt -> bindValue(':intrebare_img', NULL); 
      if ($_FILES['opt1_img']['size'] > 0) { 
        $tmpName = $_FILES['opt1_img']['tmp_name']; 
        $stmt -> bindParam(':opt1_img', file_get_contents($tmpName)); 
      } 
      else 
       $stmt -> bindValue(':opt1_img', NULL); 
      if ($_FILES['opt2_img']['size'] > 0) { 
        $tmpName = $_FILES['opt2_img']['tmp_name']; 
        $stmt -> bindParam(':opt2_img', file_get_contents($tmpName)); 
      } 
      else 
       $stmt -> bindValue(':opt2_img', NULL); 

      if ($_FILES['opt3_img']['size'] > 0) { 
        $tmpName = $_FILES['opt3_img']['tmp_name']; 
        $stmt -> bindParam(':opt3_img', file_get_contents($tmpName)); 
      } 
      else 
      $stmt -> bindValue(':opt3_img', NULL); 
      $stmt -> execute(); 
      // close connection 
      $stmt->closeCursor(); 
      $stmt = null; 
      $dbh = null; 
      sleep(60); 

      } 
      else echo "STM FAILED !!"; 
} 

由於從另一個問題,關於這個網站誤導性的答案我第一次使用的mysqli連接嘗試顯然,這是一個失敗! 而另一件我不得不提到的其他人看代碼是在' 用戶密碼被定義的常量!