foreach循环只接受数组的第一个索引

时间:2016-09-22 11:04:52

标签: php mysql arrays oop foreach

我在PHP中做了一个简单的例子,目标是简单地将数组的值插入数据库。字段名称是数组键,字段值是数组值。我选择面向对象的样式进行查询,因为我正在练习OOP。当我循环它时,问题是:代码只接受数组的第一个索引,即“名称”;它应该接受这四个值,因为该表包含四个字段(名称,电子邮件,用户名,密码)。现在数据库中的结果只是name字段有值,其余字段为null。这是代码:

<?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' => 'samplename@samplemail.com',
    'username' => 'sampleusername',
    'password' => '12345'
)));

?>

我想知道我的代码有什么问题,如果你给我改进的提示,我会更感激。

1 个答案:

答案 0 :(得分:-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' => 'samplename@samplemail.com',
    'username' => 'sampleusername',
    'password' => '12345'
)));