2016-09-22 108 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