2016-03-03 176 views
0

我寫了一個功能不工作SQL插入我想要的任何數據庫:PDO - 沒有任何警告

public function insert($db, $array_label, $array_value){ 
    $DB = new PDO('mysql:host='.$_SESSION['mysql'][0].';dbname='.$_SESSION['mysql'][1].';charset=utf8', $_SESSION['mysql'][2], $_SESSION['mysql'][3]); 

    $sql = "INSERT INTO '".$db."' ("; 

    for($i = 0; $i < count($array_label); $i++){ 
     if($i > 0) 
      $sql .= ", "; 

     $sql .= "'".$array_label[$i]."'"; 
    } 

    $sql .= ") VALUES ("; 

    for($i = 0; $i < count($array_label); $i++){ 
     if($i > 0) 
      $sql .= ", "; 

     $sql .= ":".$array_label[$i]; 
    } 
    $sql .= ")"; 

    $stmt = $DB->prepare($sql); 
    echo '\$DB->prepare("'.$sql.'");';//DEBUG 

    for($i = 0; $i < count($array_label); $i++){ 
     $label = ":".$array_label[$i]; 
     $stmt->bindParam("$label", $array_value[$i]); 
     echo '</br>\$stmt->bindValue("'.$label.'", '.$array_value[$i].')';//DEBUG 
    } 

    $stmt->execute; 
    echo "</br></br>Requ&ecirc;te OK."; 
} 

}

然後,我用這樣的:

$array_label = array('ID', 'ID_lang', 'ID_entry_cat', 'date', 'label', 'content'); 
$array_value = array($ID, $ID_lang, $ID_entry_cat, "2016-03-03 00:00:00", $label, $content); 
$DB->insert('entry', $array_label, $array_value); 

經過大量測試後,可能會出現語法問題,但我無法弄清楚在哪裏。

這是我自回波的(// DEBUG)有:

$DB->prepare("INSERT INTO 'entry' ('ID', 'ID_lang', 'ID_entry_cat', 'date', 'label', 'content') VALUES (:ID, :ID_lang, :ID_entry_cat, :date, :label, :content)"); 
\$stmt->bindValue(":ID", 1) 
\$stmt->bindValue(":ID_lang", 1) 
\$stmt->bindValue(":ID_entry_cat", 1) 
\$stmt->bindValue(":date", 2016-03-03 00:00:00) 
\$stmt->bindValue(":label", dsqfsdq) 
\$stmt->bindValue(":content", sdqfdsqf) 

我知道有關於PDO沒有返回錯誤很多話題,但是: 閱讀他們中的很多後,沒」根本無法幫助我。讓我們這樣說吧:我是一個完全的PDO的noob。

我向你展示的回聲是我的功能在做什麼。

我封閉我的數據庫的一些圖片,以幫助:

enter image description here enter image description here

PS:我闊葉去「約會」,但它不應該鬧事。我用它測試了同樣的東西,它也做了同樣的事情:沒有。

+0

'$ stmt-> execute;'是一個錯字嗎? – apokryfos

+0

在日期字段中不允許空值。你試圖放在那裏?什麼價值? – 2016-03-03 10:53:42

+0

PhpMyAdmin填充該字段,如果你什麼都不放。 – Madz

回答

1

,因爲你是傳遞值替換bindvalue bindparam該數組的: 編輯 你也有表和列名的報價,我取而代之的是反引號,你也缺少括號內爲執行

function insert($db, $array_label, $array_value){ 
     $DB = new PDO('mysql:host='.$_SESSION['mysql'][0].';dbname='.$_SESSION['mysql'][1].';charset=utf8', $_SESSION['mysql'][2], $_SESSION['mysql'][3]); 

    $sql = "INSERT INTO `".$db."` ("; 

    for($i = 0; $i < count($array_label); $i++){ 
     if($i > 0) 
      $sql .= ", "; 

     $sql .= "`".$array_label[$i]."`"; 
    } 

    $sql .= ") VALUES ("; 

    for($i = 0; $i < count($array_label); $i++){ 
     if($i > 0) 
      $sql .= ", "; 

     $sql .= ":".$array_label[$i]; 
    } 
    $sql .= ")"; 

    $stmt = $DB->prepare($sql); 
    echo '\$DB->prepare("'.$sql.'");';//DEBUG 

    for($i = 0; $i < count($array_label); $i++){ 
     $label = ":".$array_label[$i]; 
     $stmt->bindValue("$label", "$array_value[$i]"); 
     echo '</br>\$stmt->bindValue("'.$label.'", "'.$array_value[$i].'")';//DEBUG 
    } 

    $stmt->execute(); 
    echo "</br></br>Requ&ecirc;te OK."; 
} 
+1

bindValue()類型我猜 –

+0

不工作:/。我不明白你爲什麼要放上''和''',所以我只爲bindvalue而改變。 – Madz

+0

@Madz用這個選項的回聲編輯你的問題。 – Mihai

0

嘗試在異常模式下運行PDO,你可以再搭上PDO例外:

$db_pdo = new PDO($db_dsn, $dbuser, $dbpassword); 
$db_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

// its function 
$stmt->execute(); 

還反過來對PHP錯誤報告,看看怎麼回事

+0

感謝您的回答。不幸的是,它什麼都沒做:/ – Madz

+0

用pdo語句嘗試{} catch(PDOException $ e){..} –

+0

[不要嘗試{} catch(PDOException $ e){..}用pdo語句](https:/ /phpdelusions.net/pdo#errors) –

相關問題