2012-10-05 80 views
0

我試圖用PHP實現活動記錄模式;我有以下代碼執行查詢INSERT INTO與活動記錄模式時出錯

<?php 

// define 'MySQL' class 
class users{ 
    private $result; 

    public function __construct($host='localhost',$user='user',$password='password',$database='pruebalabo'){ 
    // connect to MySQL and select database 
    if(!($conId = @mysql_connect("127.0.0.1","root",""))){ 
     throw new Exception('Error connecting to the server'); 
    } 
    if(!mysql_select_db("pruebalabo",$conId)){ 
     throw new Exception('Error selecting database'); 
    } 
    } 

    // run SQL query 
    public function query($query){ 
    if(!$this->result=mysql_query($query)){ 
     throw new Exception('Error performing query '.$query); 
    } 
    } 
    // fetch one row 
    public function fetchRow(){ 
    while($row=mysql_fetch_array($this->result)){ 
     return $row; 
    } 
    return false; 
    } 
    // fetch all rows 
    public function fetchAll($table='users'){ 
    $this->query('SELECT * FROM '.$table); 
    $rows=array(); 
    while($row=$this->fetchRow()){ 
     $rows[]=$row; 
    } 
    return $rows; 
    } 
    // insert row 
    public function insert($params=array(),$table='default_table'){ 
    $sql='INSERT INTO '.$table.' ('.implode(',', array_keys($params)).') VALUES ('.implode("','",array_values($params)).')'; 
    $this->query($sql); 
    } 

} 


try{ 
    // connect to MySQL and select a database 
    $db=new users("host","root","","pruebalabo"); 
    $result=$db->fetchAll('users'); 
    foreach($result as $row){ 
    echo $row['firstname'].' '.$row['lastname'].' '.$row['email'].'<br />'; 
    } 

    // connect to MySQL and select a database 
    $db=new users("127.0.0.1","root","","pruebalabo"); 
    // insert new row into selected MySQL table 
    $db->insert(array('firstname'=>'Sebas','lastname'=>'Guajardo','email'=>'[email protected]'),'users'); 

} 

catch(Exception $e){ 
    echo $e->getMessage(); 
    exit(); 
} 

?> 

當我嘗試運行代碼,不過,我得到一個錯誤與以下行

$db->insert(array('firstname'=>'Sebas','lastname'=>'Guajardo','email'=>'[email protected]'),'users'); 

我沒有看到語法錯誤,和我直接從this頁面拿到了這個例子。我的數據庫的名稱(在MySQL上實現)是'pruebalabo',表名是'users'。

編輯:修正了錯誤指出。仍然出現錯誤。

+0

您遇到的錯誤是什麼? – andrewsi

+0

@andrewsi執行查詢INSERT INTO用戶(名,姓,電子郵件)時出錯VALUES(Sebas','Guajardo','[email protected]) –

回答

1

更改您的插入功能,如下所示

public function insert($params=array(),$table='default_table'){ 
    $sql='INSERT INTO '.$table.' ('.implode(',', array_keys($params)).') VALUES ('.'\''.implode("','",array_values($params)).'\''.')'; 
    $this->query($sql); 
    } 
+0

男人,我不能相信這是如此愚蠢的東西。非常感謝!! –

2

您的函數包含變量$firstname,但該變量不存在。看起來您打算在執行implode(',' , array_keys($params))時將數組鍵作爲列名提供,而將數組值插入VALUES()列表中。

public function insert($params=array(),$table='default_table'){ 
    // Pass the array keys as column names to match the VALUES(). 
    // I have surrounded them all in `backquotes` in the implode() here 
    $sql="INSERT INTO ".$table." (`" . implode('`,`', array_keys($params)) . "`) VALUES ('".implode("','",array_values($params))."')"; 
    $this->query($sql); 
} 

務必檢查在mysql_query()呼叫成功或失敗,並且失敗檢查的mysql_error()輸出。

注意:我們假設您在安全地轉義中的值之前將它們傳遞給您的查詢,因爲它們不屬於這個硬編碼。

+0

我將行更改爲'$ sql ='INSERT INTO'。$ table。 「 ('.implode(',',array_keys($ params))。')VALUES('.implode('','「,array_values($ params))。')'; $ this-> query($ sql);'但我仍然收到錯誤。 –

+1

@AnaAmeer上面的引用改變了。你是圍繞着外部VALUES短一個單引號 –

+0

是的,我現在看到了。謝謝! –

1

此功能

public function insert($params=array(),$table='default_table'){ 
    $sql='INSERT INTO '.$table.' ('.$firstName.') VALUES ('.implode("','",array_values($params)).')'; 
    $this->query($sql); 
    } 

使用未定義的「$名字」,並採取照顧您指定的值應該與你指定的列對應的變量(「 $您的名字。」)

使用此代碼的功能,這個問題似乎是缺少 「'」 字符:

$sql= "INSERT INTO $table (".implode(',', array_keys($params)) 
.") VALUES ('".implode("','",array_values($params))."')"; 
$this->query($sql); 

問候

+0

對不起,這是一條被修改並忘記改回的行。我將它改爲'$ sql ='INSERT INTO'。$ table。' ('.implode(',',array_keys($ params))。')VALUES('.implode('','「,array_values($ params))。')'; $ this-> query($ sql);'但我仍然收到錯誤。 –

+1

我使用新代碼更新回覆。似乎是缺少一些'人物 – leticia