2016-09-22 109 views
-1

我在PHP中做了一個簡單的例子,目標只是將數組的值插入到數據庫中。字段名稱是數組鍵,字段值是數組值。我選擇面向對象的風格進行查詢,因爲我正在練習面向對象。當我打開它時,問題是這樣的:代碼只接受數組的第一個索引,即「名稱」;它應該接受四個值,因爲該表由四個字段(名稱,電子郵件,用戶名,密碼)組成。現在數據庫中的結果只有名稱字段有值,其餘字段爲空。下面是代碼:foreach循環只接受數組的第一個索引

<?php 

class User { 
    public static function insert($table, $table_fields = array()) { 
     if(count($table_fields)) { 
      foreach($table_fields as $field_name => $field_value) { 
       return "INSERT INTO $table ($field_name) VALUES ('$field_value')"; 
      } 
     } 
     return false; 
    } 
} 

$connect = mysqli_connect('localhost', 'root', '', 'sample'); 

mysqli_query($connect, User::insert('users', array(
    'name' => 'Sample Name', 
    'email' => '[email protected]', 
    'username' => 'sampleusername', 
    'password' => '12345' 
))); 

?> 

我想知道什麼是錯我的代碼,它會給我更加感激,如果你給我相應的改進建議。

+3

第一次返回將結束函數執行。 – Phiter

+0

你正在試圖創建自己的活動記錄功能,你應該查看一個已經存在的記錄,比如[PHP ActiveRecord](http://www.phpactiverecord.org/) – Phiter

+5

另外,不要構建*手動查詢*,**總是**使用[準備好的語句](https://php.net/manual/mysqli.quickstart.prepared-statements.php)。 – Yoshi

回答

-1

代碼波紋管將使你的例子工作,如果你仍然想使用foreach你需要把它放在它後面。
而像評論指出,你需要使用準備好的語句或一些庫來建立你的查詢。

<?php 

class User { 
    public static function insert($table, $table_fields = array()) { 
     if(count($table_fields)) { 
      return "INSERT INTO $table ('".implode("','",array_keys($table_fields))."') 
          VALUES ('".implode("','",$table_fields)."')"; 
     } 
     return false; 
    } 
} 

$connect = mysqli_connect('localhost', 'root', '', 'sample'); 
mysqli_query($connect, User::insert('users', array(
    'name' => 'Sample Name', 
    'email' => '[email protected]', 
    'username' => 'sampleusername', 
    'password' => '12345' 
))); 
+0

您的代碼有誤,VALUES('「.implode(」','' 「,$ table_fields)。」')「;;語法錯誤; – Dave

+0

已更正,對不起 – ban17

+0

因此,您基本上都在手動執行所有操作_prepare_會自動執行.. – dbf