2013-05-06 83 views
1

我有一些PDO,我試圖用來插入數據到MySQL表中。爲什麼沒有插入到我的MySQL表中?

private function addResource() { 
    include('./dbconnect.php'); 
    $pdo = new PDO("mysql:host=$db_host;dbname=$db_name;", $db_user, $db_password); 
    $stmt = $pdo->prepare('INSERT INTO Resources VALUES (?, $title, $url, $_SESSION[\'tblUserID\''); 
    $stmt->bindParam(1, $title); 
    $stmt->bindParam(2, $url); 
    $stmt->bindParam(3, $_SESSION['tblUserID']); 
    $stmt->execute(); 
    if ($stmt->rowCount() != 1) 
     throw new Exception('Could not add resource'); 
    $status = true; 
} 

事情是,每當我檢查表時,什麼都沒有插入。怎麼來的?

編輯:我有session_start()在頁面頂部。

+0

您要添加三個參數到查詢,但只有一個佔位符。嘗試用額外的問號替換$ title,$ url和$ _SESSION [\'tblUserID \'。現有的佔位符添加了什麼? – andrewsi 2013-05-06 17:12:06

+1

如果您使用準備好的語句,爲什麼還要將變量插入字符串中? – Barmar 2013-05-06 17:12:08

+1

您應該在PDO方法調用周圍放置'try' /'catch'處理程序,以便在SQL中看到錯誤。 – Barmar 2013-05-06 17:13:06

回答

6

因爲您使用的PDO完全錯誤。佔位符不使用PHP變量語法。查詢字符串應該是:

$stmt = $pdo->prepare('INSERT INTO .... VALUES (:id, :title, :url, :userid') 
                ^^^^^^ 
$stmt->bindParam(':title', $title); 
        ^^^^^^ 

注意使用:whatever格式的佔位符。

因爲它是現在寫的,你的查詢是單位出語法錯誤,且易受SQL injection attacks

+0

謝謝!我忘了那個。 – mishmomo 2013-05-06 17:16:59

+1

看起來你忘了一個尾隨的引用,它會導致語法突出顯示出來。 – tadman 2013-05-06 17:26:11

+0

我認爲它仍然是越野車,但我確實把它包裝在try/catch中,並將變量從準備好的語句中提取出來。 – mishmomo 2013-05-06 17:43:42

0

試試這個:

private function addResource() { 
     include('./dbconnect.php'); 
     try{ 
      $pdo = new PDO("mysql:host=$db_host;dbname=$db_name;", $db_user, $db_password); 
      $stmt = $pdo->prepare('INSERT INTO Resources VALUES (:title, :url, :userid)'; 
      $stmt->bindParam(':title', $title); 
      $stmt->bindParam(':url', $url); 
      $stmt->bindParam(':userid', $_SESSION['tblUserID']); 
      $stmt->execute(); 
      if ($stmt->rowCount() != 1) 
      throw new Exception('Could not add resource'); 
      $status = true; 
      } 
     }catch (Exception $e){ 
      echo $e->getMessage(); 
      exit; 
     } 
    } 

編號:http://php.net/manual/en/pdo.prepared-statements.php

+0

我嘗試添加如此處所示的try/catch,但我沒有收到任何異常。 – mishmomo 2013-05-06 17:41:30

+0

它是否將數據插入到表中?除非出現錯誤,否則不會顯示任何異常。嘗試將'echo $ title;'添加到您的代碼中,並查看它是否輸出了您期望的內容。如果它不能刪除'私人功能。 。 .'並使它只是'function addResource()。 。 。 – 2013-05-06 18:11:40

+0

它現在有效。我不小心寫了$ this-> resource - > $ url – mishmomo 2013-05-06 18:28:49

相關問題