【问题标题】:foreach loop accepts only the first index of arrayforeach 循环只接受数组的第一个索引
【发布时间】:2017-01-30 22:15:26
【问题描述】:

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

<?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'
)));

?>

我想知道我的代码出了什么问题,如果您能给我一些改进建议,我会更加感激。

【问题讨论】:

  • 第一次返回将结束函数执行。
  • 您正在重新发明轮子,试图创建自己的活动记录功能,您应该查找已经存在的功能,例如 PHP ActiveRecord
  • 另外,不要手动构建查询始终使用prepared statements
  • 即使您需要删除返回,但您知道 foreach 不会神奇地知道您要一个接一个地附加您的键,用逗号分隔?
  • @PhiterFernandes 没有人在这里重新发明轮子。您对使用 AR 的建议只是造成比解决任何现有问题更多的问题的许多无用模式示例之一。..

标签: php mysql arrays oop foreach


【解决方案1】:

下面的代码将使您的示例正常工作,如果您仍想使用 foreach,则需要在其后面加上 return。
就像 cmets 指出的那样,您需要使用准备好的语句或一些库来构建您的查询。

   <?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'
)));

【讨论】:

  • 你的代码错了,VALUES ('".implode("','",$table_fields)."')";;语法错误;
猜你喜欢
  • 1970-01-01
  • 2020-02-08
  • 2020-12-29
  • 1970-01-01
  • 2011-12-14
  • 2019-10-14
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
相关资源
最近更新 更多