Php 相同的数据保存了两次?

Php 相同的数据保存了两次?,php,Php,嗨,我正在将数据插入数据库它正在保存两次相同的数据只有用户名保存两次我只想保存一次我还想保存地址 <?php $users = array("username"=>"Kaleem", "adrress"=>"abc"); class dbase{ public function dbinsert($table,$users) { foreach ($users as $key => $value) {

嗨,我正在将数据插入数据库它正在保存两次相同的数据只有用户名保存两次我只想保存一次我还想保存地址

<?php

    $users = array("username"=>"Kaleem", "adrress"=>"abc");

class dbase{

    public function dbinsert($table,$users)
    {
        foreach ($users as $key => $value) 
        {
            $sql = "INSERT INTO $table (`$key`) VALUES ('$value')";
            $this->conn->query($sql);
            if($this->conn->query($sql))
            {
                echo "Data inserted";
            }
        }
    }

        public function __construct ()
        {

            $this->conn = new mysqli('localhost','root','','dbase');

            if($this->conn)
            {
                echo "Connected<br>";
            }
        }


}

$obj = new dbase;
$obj->dbinsert('users',$users);
?>

问题在于您调用查询函数两次

            $this->conn->query($sql); // saves the first time
            if($this->conn->query($sql)) // saves the second time
            {
                echo "Data inserted";
            }
为了避免查询被调用两次,可以将查询结果保存到变量中,并在if中进行检查

目前,您正在将用户数组的每个字段保存在自己的数据集中,因为您正在从foreach循环中调用每个字段的查询函数

试试这个:

<?php

    $users = array( // this array is for the users
                   array("username"=>"Kaleem", "adrress"=>"abc"), // this is one user
                   array("username"=>"Mickey Mouse", "adrress"=>"Test street"),
                   );

class dbase{

    public function dbinsert($table,$users)
    {
        foreach ($users as $key => $value) 
        {
            // Extract field names
            $fields = implode("`, `", array_keys ( $users[$key] );
            // Extract values
            $values = implode("', '", array_values ( $users[$key] );

            $sql = "INSERT INTO $table (`" . $fields  . "`) VALUES ('". $values ."')";
            // Check if query was succesfull
            $success = $this->conn->query($sql);
            if($success)
            {
                echo "Data inserted";
            } else { // if no success display error message
                echo "Error while saving";
            }
        }
    }

        public function __construct ()
        {

            $this->conn = new mysqli('localhost','root','','dbase');

            if($this->conn)
            {
                echo "Connected<br>";
            }
        }


}

$obj = new dbase;
$obj->dbinsert('users',$users);
?>

在sql中,名称和地址作为列名,相应的值作为字段值

public function dbinsert($table,$users)
{
    $sqlKeys = []; 
    $sqlValues = [];
    foreach ($users as $key => $value) 
    {

       $sqlKeys[] = "'".$key."'";
       $sqlValues[] = "'".$value."'";
    }
    $keys = array_implode(",",$sqlKeys);
    $values = array_implode(",",$sqlValues);

    $sql = "INSERT INTO $table ($keys) VALUES ($values)";
    if($this->conn->query($sql))
    {
        echo "Data inserted";
    }

}

这是因为对单个数组维度使用了foreach()

$users = ["username"=>"Kaleem", "adrress"=>"abc"];
foreach($users as $key=>$value){
    echo $value."\n";
}
this
$success=$this->conn->query($sql)array
长度为
0
1
,所以code>执行了两次,如果要使用foreach,必须使用多维数组,如

$users = [
    ["username"=>"Kaleem", "adrress"=>"abc"]
];
foreach($users as $key=>$value){
    $sql = "INSERT INTO $table (`username`, `adrress`) VALUES ('". $value['username'] ."', '". $value['adrress'] ."')";
    $this->conn->query($sql);
}

用户名正在保存一次,但地址未保存您的表中是否有字段“adress”?因为它现在的方式将把数组中的每个字段保存为自己的行。我假设您希望将用户名和地址保存在同一行中,对吗?是的,我在表中有地址字段。您已将此插入项添加到$table(
username
adress
)用户名和地址。这应该是变量$key,因为我希望它是动态的。@KaleemBhatti现在可以了吗,请接受它作为答案,如果它是确定的或让我们在聊天。