如何用面向对象的PHP将数据插入数据库

如何用面向对象的PHP将数据插入数据库,php,mysql,Php,Mysql,我的INSERT语句不起作用。受影响的行数为0。这是我的密码: <?php require_once('class.config.php'); class userActions{ public $link; function __construct(){ $db_connection = new dbConnection(); $this->link = $db_connection->connect();

我的
INSERT
语句不起作用。受影响的行数为
0
。这是我的密码:

<?php

require_once('class.config.php');

class userActions{

    public $link;      

    function __construct(){
        $db_connection = new dbConnection();
        $this->link = $db_connection->connect();   
        return $this->link;
    }

    function registerUsers($username, $password, $ip_address){
        $query = $this->link->prepare("INSERT INTO users (user_name,password,ip_address) VALUES (?,?,?)");
        $values = array($username, $password, $ip_address);
        $query->execute($values);
        $counts = $query->rowCount();
        return $counts;
    }
}

$users = new userActions();
echo $users->registerUsers('bob', 'dave123','127.0.0.1');

?>

}

将注册表用户功能代码更改为以下

如果您使用的是
mysqli
,请使用下面的

function registerUsers($username, $password, $ip_address){
       $query = $this->link->prepare("INSERT INTO users (user_name,password,ip_address) VALUES (?,?,?)");
       $query->bind_param("sss", $username, $password, $ip_address);
       $query->execute();

}
编辑

正如我看到的,您正在使用
PDO
。 试着像下面的任何人一样使用

function registerUsers($username, $password, $ip_address){
       $query = $this->link->prepare("INSERT INTO users (user_name,password,ip_address) VALUES (:username,:password,:ip_address)");
       $query->bindParam(':username', $username);
       $query->bindParam(':password', $password);
       $query->bindParam(':ip_address', $ip_address);
       $query->execute();
}


我更喜欢使用
bindParam
,因为它是安全的,并且可以替换我的_real_escape_字符串。

下面的内容可以帮助您了解如何通过oop编程插入数据库

数据库类:

public static $con;

public static function connect($hostname , $username , $password , $database)
{
    self::$con = mysqli_connect($hostname , $username , $password , $database) or die('Error: '.mysqli_connect_error());
}
public static function disconnect()
{
    mysqli_close(self::$con);
}
public static function insert($sql , $values)
{
    $values = self::safeValues($values);
    $sql = self::$con->prepare($sql);
    mysqli_set_charset(self::$con , 'UTF8');
    self::bindValues($sql , $values);
    $save = $sql->execute();
    return $save;
}
public function safeValues($values = null)
{
    if($values != null)
    {
        for($i = 0 ; $i < count($values) ; $i++)
        {
            $values[$i] = trim($values[$i]);
            $values[$i] = strip_tags($values[$i]);
            mysqli_real_escape_string(self::$con , $values[$i]);
        }
    }
    return $values;
}
public function bindValues($sql, $values = null)
{
    if ($values != null)
    {
        // Generate the Type String (eg: 'issisd')
        $types = '';
        foreach($values as $value)
        {
            if(is_int($value))
                $types .= 'i';
            elseif (is_float($value))
                $types .= 'd';
            elseif (is_string($value))
                $types .= 's';
            else
                $types .= 'b';
        }
        // Add the Type String as the first Parameter
        $bind_names[] = $types;
        // Loop thru the given Parameters
        for ($i = 0 ; $i < count($values) ; $i++)
        {
            // Create a variable Name
            $bind_name = 'bind'.$i;
            // Add the Parameter to the variable Variable
            $$bind_name = $values[$i];
            // Associate the Variable as an Element in the Array
            $bind_names[] = &$$bind_name;
        }
        // Call the Function bind_param with dynamic Parameters
        call_user_func_array(array($sql,'bind_param') , $bind_names);
    }
    return $sql;
}
DB::connect('localhost' , 'username' , 'password' , 'database');

DB::insert("INSERT INTO table(field1, field2) VALUES (? , ?)" , [ $val1 , $val2 ] );

我希望这能对你有所帮助。

因此我通过在class.config.php中用
127.0.0.1
删除
localhost:8080
解决了我的代码。

为什么在这行$query->bind_参数(“sss”、$username、$password、$ip_address)中有“sss”@AhmetKarabulut它表示您提供的值的类型,s表示字符串,因此在本例中,它表示您提供了3个字符串($username、$password和$ip_address),它将参数绑定到sql查询,并告诉数据库参数是什么。看一看,它告诉我:致命错误:未捕获PDOException:SQLSTATE[3D000]:无效目录名:1046未选择数据库。是的,我试过两种方法。我也在上面编辑了我的代码,似乎你的数据库连接没有建立。尝试打印您的连接并查看它显示的内容。错误字段是否有0或其他内容。如果您尝试使用
PDO
而不是
Mysqli
来解决OP的问题会更好。我知道其他方法,但您能修复我遇到问题的代码吗?不幸的是,我没有使用PDO。那么您为什么回答我的问题是-如何使用*对象将数据插入数据库面向对象的PHP*
public static $con;

public static function connect($hostname , $username , $password , $database)
{
    self::$con = mysqli_connect($hostname , $username , $password , $database) or die('Error: '.mysqli_connect_error());
}
public static function disconnect()
{
    mysqli_close(self::$con);
}
public static function insert($sql , $values)
{
    $values = self::safeValues($values);
    $sql = self::$con->prepare($sql);
    mysqli_set_charset(self::$con , 'UTF8');
    self::bindValues($sql , $values);
    $save = $sql->execute();
    return $save;
}
public function safeValues($values = null)
{
    if($values != null)
    {
        for($i = 0 ; $i < count($values) ; $i++)
        {
            $values[$i] = trim($values[$i]);
            $values[$i] = strip_tags($values[$i]);
            mysqli_real_escape_string(self::$con , $values[$i]);
        }
    }
    return $values;
}
public function bindValues($sql, $values = null)
{
    if ($values != null)
    {
        // Generate the Type String (eg: 'issisd')
        $types = '';
        foreach($values as $value)
        {
            if(is_int($value))
                $types .= 'i';
            elseif (is_float($value))
                $types .= 'd';
            elseif (is_string($value))
                $types .= 's';
            else
                $types .= 'b';
        }
        // Add the Type String as the first Parameter
        $bind_names[] = $types;
        // Loop thru the given Parameters
        for ($i = 0 ; $i < count($values) ; $i++)
        {
            // Create a variable Name
            $bind_name = 'bind'.$i;
            // Add the Parameter to the variable Variable
            $$bind_name = $values[$i];
            // Associate the Variable as an Element in the Array
            $bind_names[] = &$$bind_name;
        }
        // Call the Function bind_param with dynamic Parameters
        call_user_func_array(array($sql,'bind_param') , $bind_names);
    }
    return $sql;
}
DB::connect('localhost' , 'username' , 'password' , 'database');

DB::insert("INSERT INTO table(field1, field2) VALUES (? , ?)" , [ $val1 , $val2 ] );