php - 使用准备好的语句将值插入数据库

标签 php html mysql prepared-statement

我试图让用户在数据库表中插入特定行的值。但是我不断收到错误消息:调用成员函数 register()

这是我用来更新表格的 php 和 html 代码

<?php
ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
session_start();
require_once 'class.user.php';
$user_home = new USER();

if(!$user_home->is_logged_in())
{
    $user_home->redirect('index.php');
}

$stmt = $user_home->runQuery("SELECT * FROM tbl_client_info WHERE UCODE=:uid");
$stmt->execute(array(":uid"=>$_SESSION['userSession']));
$row = $stmt->fetch(PDO::FETCH_ASSOC);

    if($stmt->rowCount() == 1)
    {
        if(isset($_POST['submit']))
        {
            $purchasedata = $_POST['purchasedata']; 
            $cpurchasedata = $_POST['cpurchasedata'];


            if($cpurchasedata!==$purchasedata)
            {
                $msg = "<div class='alert alert-block'>
                        <button class='close' data-dismiss='alert'>&times;</button>
                        <strong>Sorry!</strong>  Input Does Not Match. Make sure the details match. 
                        </div>";
            }
            else
            {

                $stmt = $user-> register("UPDATE tbl_client_info SET purchasedata=? WHERE UCODE=:uid");
                $stmt->execute(array(":purchasedata"=>$purchasedata,":uid"=>$rows['UCODE']));

                //

                $msg = "<div class='alert alert-success'>
                        <button class='close' data-dismiss='alert'>&times;</button>
                        Okay, we have added data to your account.
                        </div>";
            }
        }   
    }
    else
    {
        $msg = "<div class='alert alert-success'>
                <button class='close' data-dismiss='alert'>&times;</button>
                No Sorry That Did Not Work, Try again
                </div>";

    }

?>

<!DOCTYPE html>
<html>
  <head>
    <title>Forgot Password</title>
    <!-- Bootstrap -->
    <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen">
    <link href="bootstrap/css/bootstrap.css" rel="stylesheet" media="screen">
    <link href="bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet" media="screen">
    <link href="assets/styles.css" rel="stylesheet" media="screen">

    <link href="css/bootstrap.min.css" rel="stylesheet">

    <link href="fonts/css/font-awesome.min.css" rel="stylesheet">
    <link href="css/animate.min.css" rel="stylesheet">
     <!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
    <!--[if lt IE 9]>
      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    <!-- Custom styling plus plugins -->
    <link href="css/custom.css" rel="stylesheet">
  <link href="css/icheck/flat/green.css" rel="stylesheet">
<script src="js/vendor/modernizr-2.6.2-respond-1.1.0.min.js"></script>

<!-- Sweet Alert -->
  <script src="dist/sweetalert-dev.js"></script>
  <link rel="stylesheet" href="dist/sweetalert.css">
  <!--.......................-->

  </head>



<body style="background:#f3f3f3;"> 

    <div id="wrapper">
      <div id="login_content" class="animate form">
        <section class="login_content">
          <form method="post">
            <h1>Purchase Data</h1>

            <div class='alert alert-success'>
            <strong>Hello </strong><?php echo $row['firstname'] ?>! //add more text here
        </div>

        <?php
        if(isset($msg))
        {
            echo $msg;
        }
        ?>
        <input type="text" class="input-block-level" placeholder="500mb" name="purchasedata" required />
        <input type="text" class="input-block-level" placeholder="Retype the bundle" name="cpurchasedata" required />
        <hr />
        <button class="btn btn-large btn-primary" type="submit" name="btn-update-data">Add data to my account</button>
            <div class="clearfix"></div>
            <div class="separator">

              <p class="change_link">All Done ?
                <a href="index.php" class="to_register"> Go Home </a> 

我的 class.user.php 看起来像这样:

<?php

require_once 'dbconfig.php';

class USER
{   

    private $conn;

    public function __construct()
    {
        $database = new Database();
        $db = $database->dbConnection();
        $this->conn = $db;
    }

    public function runQuery($sql)
    {
        $stmt = $this->conn->prepare($sql);
        return $stmt;
    }

    public function lasdID()
    {
        $stmt = $this->conn->lastInsertId();
        return $stmt;
    }

    public function register($uname,$email,$upass,$code,$purchasedata)
    {
        try
        {                           
            $password = md5($upass);
            $stmt = $this->conn->prepare("INSERT INTO tbl_client_info(User_Name,billingemail,password,purchasedata,tokenCode) 
                                                         VALUES(:User_Name, :billingemail, :password, :purchasedata, :active_code)");
            $stmt->bindparam(":user_name",$uname);
            $stmt->bindparam(":user_mail",$email);
            $stmt->bindparam(":user_pass",$password);
            $stmt->bindparam(":active_code",$code);
            $stmt->bindparam(":purchasedata",$purchasedata);
            $stmt->execute();   
            return $stmt;
        }

我做错了什么?我已经搜索了错误,但我看不出哪里出错了。任何帮助或帮助链接将不胜感激。

最佳答案

$user 应该是 $user_home。您在调用 register 函数时使用了错误的变量。

关于php - 使用准备好的语句将值插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42219923/

相关文章:

java - 将 UTF8 文本插入 latin1 列时出现 "Incorrect string value:"MySQL 问题

mysql - Talend 无法将列解析为时间戳

php - Javascript 不会在 php 页面上运行

php - 使用 PHP 变量加载 View 的一部分

php - 在 Linux 上的 Zend 配置 ini 文件中包含花括号内的变量

html - overflow-x 不适用于 td 中包含的内容

html - 带分号的元刷新

PHP fopen() : Filename cannot be empty cause by getRealPath return false

javascript - html5 模式不仅允许数字,还接受所有内容

php - mysql选择两个表并使用 "or"变得非常慢