dongleman4760 2017-09-05 08:51
浏览 89

如何使用面向对象的PHP将数据插入数据库[关闭]

My INSERT statement is not working. The number of rows affected is affected is 0. Here is my code :

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

?>

What have I done wrong?

EDIT : this is my class.config.php:

class dbConnection{
protected $db_conn;
public $db_host = "localhost:8080";
public $db_user = "root";
public $db_pass = "";
public $db_name = "facebook";

function connect(){
    try{
    $this->db_conn = new PDO("mysql:host = $this->db_host; dbname = $this->db_name",
    $this->db_user, $this->db_pass);
    $this->db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $this->db_conn;    
    }

    catch(PDOException $e){
        return "MySQL error : " . $e->getMessage();
    }
}

}

  • 写回答

3条回答 默认 最新

  • donglang2010 2017-09-05 08:56
    关注

    Change your registerUsers function code to below

    If you are using mysqli then use below

    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();
    
    }
    

    EDIT

    As I see you are using PDO. Try to use like anyone of below

    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();
    }
    

    OR

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

    I would prefer to use bindParam as it is secure and it replaces my_real_escape_string.

    评论

报告相同问题?

悬赏问题

  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。
  • ¥15 opencv图像处理,需要四个处理结果图
  • ¥15 无线移动边缘计算系统中的系统模型
  • ¥15 深度学习中的画图问题
  • ¥15 java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条