2011-06-09 93 views
-3

所以我是一個初學者,我很難做一些看起來很簡單的事情。我無法讓我的桌子更新,也沒有發現任何錯誤。看看:PHP和PDO問題

<?php 

    $host = 'localhost'; 
    $dbname = 'postGal'; 
    $user = 'user'; 
    $pass = 'pass'; 

    $DB = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
    $DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    catch(PDOException $e) { 
    echo "Reported Error"; 
    file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND); 
    } 

    class person { 
    public $f_name; 
    public $l_name; 

    function __construct($f,$l) { 
     $this->f_name = $f; 
     $this->l_name = $l; 
    } 
    } 

    $person = new person('John','Doe'); 

    $STMT = $DB->("INSERT INTO users (f_name, l_name) value (:f_name, :l_name)"); 
    $STMT->execute((array)$person); 

?> 

此外,我知道表和一切工作正常,因爲我可以用mysql或mysqli執行相同的語句。謝謝!

回答

2

您必須擁有可能在try-block中拋出異常以捕獲拋出的異常的代碼塊。

Manual

也有說在INSERT語句VALUES沒有價值。

您也完全錯誤地應用準備好的語句。一些簡單的例子參見手冊。例如,你必須在某個時候調用prepare-method,而你的數組投射很奇怪,不知道你做了什麼。

我也在這裏嗅到巨魔。

+0

呃..沒有巨魔。只需遵循一個教程並進行一些修改即可。 http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/ – 2011-06-09 17:00:08

0

也許catch想成爲set_error_handler$DB->("INSERT錯過了prepare方法。最後,我不認爲你可以像這樣將一個對象轉換爲一個數組。也許你想要get_object_vars並操縱它成爲所需的數組(密鑰以冒號開頭),但是什麼是對象?只需使用一個數組。

+0

我看不出有什麼理由認爲這是一個拖釣嘗試。這只是糟糕的代碼。 – lonesomeday 2011-06-09 16:56:21

+0

爲什麼downvotes?儘管我說它太破碎了,但它看起來像是我試圖解決的大部分問題,並給出了建議。 – chx 2011-06-09 21:29:42

+0

那麼,OP可能不是一個巨魔,但你的答案的前一個版本是有點苛刻的一面。請保持好。 – Will 2011-06-10 13:45:25