Проблема в том, что вы вызываете функцию запроса дважды.
$this->conn->query($sql); // saves the first time
if($this->conn->query($sql)) // saves the second time
{
echo "Data inserted";
}
Чтобы избежать повторного вызова запроса, вы можете сохранить результат запроса в переменную и проверить его в if.
В настоящее время вы сохраняете каждое поле массива пользователей в своем собственном наборе данных, потому что вы вызываете функцию запроса для каждого поля из своего foreach l oop.
Попробуйте это:
<?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);
?>