2013-03-10 464 views
1

我有一個查詢方法是這樣的:不知道爲什麼插入數據庫不起作用?

class classOne { 
    // Relevant variables 
    protected $db, $result; 

    public function query ($sql) { 
    $this->result = $this->db->query($sql); 
    // So, run mysql query provided by the argument 
    } 
} 

然後插入方法是這樣的:

class classTwo extends classOne { 
    public function insertStuff ($id, $text) { 
    $this->query("INSERT INTO Tablename (id, text, time) VALUES ($id, $text, NOW())"); 
    } 
} 

然後,我實例化類$c = new classTwo;並調用該方法(包括在不同的PHP文件,但與類文件在同一個文件夾中)$c->insertStuff(1, "This is a test");

我沒有得到erros,表沒有得到任何字段,甚至沒有空的。但是直接使用方法與硬編碼值,如:

public function insertStuff ($id, $text) { 
    $this->query("INSERT INTO Tablename (id, text, time) VALUES (1, "Some text", NOW())"); 
} 

它將工作。然後我嘗試用參數替換硬編碼值1以查看它何時停止工作,它接受NOW()字段併成功插入一個新行,但只要我在其他文件中使用$text引用了我的方法調用,它停止,不會添加任何東西。

所有必需的文件都是必需的,如果有的話,它會引發錯誤。我很困惑。

+0

這是沒有意義的使用PDO /庫MySQLi,如果你不採取利用預準備語句(這也是爲什麼你的代碼失敗了,你忘記了''''準備語句會照顧你的東西(*和*他們會讓你的代碼免於SQL注入!)) – h2ooooooo 2013-03-10 14:28:33

+0

因爲你的變量'$ text'不包含周圍的引號。它必須在查詢中被引用爲'($ id'$ text',NOW())'_它已被正確地轉義出來了!_ – 2013-03-10 14:28:37

+0

提醒:當某些東西不起作用時,*首先*啓用錯誤報告,詢問數據庫API相同。 – mario 2013-03-10 14:34:05

回答

2

您需要在查詢字符串之前和之後添加「

修復代碼:

$this->query("INSERT INTO Tablename (id, text, time) VALUES ($id, '$text', NOW())"); 
相關問題