php表单写入mysql数据库的代码

由于php7.0以后,废除了很多函数,现在度娘出来的都是错误的。
当前问题共有如下(2)个解决方案
  • 橙醉骑士团
    橙醉骑士团
    <?php
    //网上太落后了,我看见mysql_老旧的写法就头疼
    //php版本5.6以上才可用  
    //我自己写的做了一点封装WeChat:编程夜未眠
        include 'myDB.class.php';
        $Student = new myDB('Student');
        $data = array(
            'name'=>'白如意',
            'grade'=>'新手村一级',
            'girlfriend'=>'不存在数据库',
            'age'=>18
        );
        $Student->add($data);




    //myDB.class.php
    class myDB{
        public $tableName = '';
        public function __construct($tableName){
            $this->tableName = $tableName;
        }
        public function db(){
            $config = array(
                'host'=>'127.0.0.1',
                'user'=>'root',
                'password'=>'root',
                'database'=>'test',
                'port'=>3306,
            );
            $set = array_values($config);
            $mysqli = new mysqli(...$set);
            $query = 'SET NAMES UTF8';
            $mysqli->query($query);
            if($mysqli->errno){
                printf("连接数据库错误<br/> %s",$mysqli->error);
                exit;
            }
            return $mysqli;
        }
        public function add($data){
            $mysqli = $this->db();
            $tableName = $this->tableName;
            $dataArr = $this->filterFromTable($tableName,$data);
            $this->co($dataArr);
            //获得$sql ,$typeList,$needData
            extract($dataArr);
            $stmt = $mysqli->stmt_init();  
            $stmt->prepare($sql);
            $stmt->bind_param($typeList,...$needData);
            if ( $result = $stmt->execute() ){ 
                $insert_id = $stmt->insert_id;
                echo "成功插入ID".$insert_id;
            }else {  
                echo "执行失败".$stmt->errno;
                echo '</br>';
                echo $stmt->error;  
                $insert_id = 0;
            }
            return $insert_id;
        }   
        public function filterFromTable($tableName,$data){
            $sqlField = '';//字段:  a,b,c
            $sqlQ = '';//问号:  ?,?,?
            $typeList = '';//字段的类型: ssdib 
            $needData = array();
            //根据表结构获取字段类型列表
            $fieldTypeArr = $this->fieldTypeArr($tableName);
            $this->co($fieldTypeArr);
        //第一种、循环Table存在字段
            foreach($fieldTypeArr as $field=>$type){
                $param = @$data[$field]?:'编程夜未眠';//传入参数存在该字段
                if($param != '编程夜未眠'){
                    $sqlField .= $field.',';
                    $sqlQ .= '?,';
                    $typeList .= $type;
                    $needData[] = $param;
                }
            }
            $sqlField = substr( $sqlField,0,strlen($sqlField)-1 ); 
            $sqlQ = substr( $sqlQ,0,strlen($sqlQ)-1 ); 
            $sql = "INSERT INTO {$tableName}({$sqlField}) 
            VALUES({$sqlQ})";
            $dataArr = array(
                'sql'=>$sql,
                'typeList'=>$typeList,
                'needData'=>$needData,
            );
            return $dataArr;
        }
        public function fieldTypeArr($tableName){
            $arr= array();
            $mysqli = $this->db();
            $sql = "DESC {$tableName}";
            $result_obj = $mysqli->query($sql);
            while($row = $result_obj->fetch_object() ){
                $type = $row->Type;
                $field= $row->Field;
                $str = $this->oneFieldType($type);
                $arr[$field] = $str;
            }
            $mysqli->close();
            return $arr;
        }
        public function oneFieldType($type){
            $str = '';
            if(strstr($type,'int')){
                $str = 'i';
            }else if( strstr($type,'float') || strstr($type,'decimal') || strstr($type,'double')   ){
                $str = 'd';
            }else if( strstr($type,'blob') ){
                $str = 'b';
            }else{
                $str = 's';
            }
            return $str;
        }
        public function co($value){
            echo '<pre>';
            print_r($value);
            echo '</pre>';
        }
    }//End Class

    php特性与mysqli融合铸造数据库插入之剑

  • Escapespam
    Escapespam
    <!--表单文件,拷入index.php-->
    <!DOCTYPE html>
    <html>
    <head>
    <style>
    label{display:inline-block;width:100px;margin-bottom:10px;}
    </style>
     
     
    <title>Add students</title>
    </head>
    <body>
     
    <!-- 数据库用mysqli 面向过程调用方法-->
    <form method="post" action="write2db.php">

    <!--数据库用mysqli 面向过程调用方法
    <form method="post" action="write2db_sqlio.php">
    -->
    <!--数据库用PDO调用方法
    <form method="post" action="write2db_pdo.php">
    -->

    <label>First Name</label>
    <input type="text" name="first_name" />
    <br />
    <label>Last Name</label>
    <input type="text" name="last_name" />
    <br />
    <label>department</label>
    <input type="text" name="department" />
    <br />
    <label>Email</label>
    <input type="text" name="email" />
     
    <br />
    <input type="submit" value="Add students">
    </form>
       
    </body>
    </html>

    ------------------------------

    <?php
    //拷贝命名为write2db.php,数据库用mysqli 面向过程调用方法
    //print_r($_POST);

    // create a variable
    $first_name=$_POST['first_name'];
    $last_name=$_POST['last_name'];
    $department=$_POST['department'];
    $email=$_POST['email'];

    //调试用
    echo "Your input: ";
    echo $first_name;
    echo '<br />';
    echo $last_name;
    echo '<br />';
    echo $department;
    echo '<br />';
    echo $email;
    echo '<br />';


    $servername = "localhost";
    //Your database username and password
    //$username = "username";
    //$password = "password";
    $username = "tester";
    $password = "testerPassword";
    //your database name
    $dbname = "test";

    $tablename ="student";



    // Create connection
    $connect = mysqli_connect($servername, $username, $password, $dbname);

    if (!$connect) {
        die("Connection failed: " . mysqli_connect_error());
    }
    //Execute the query

    $sql="INSERT INTO $tablename (first_name,last_name,department,email)
    VALUES('$first_name','$last_name','$department','$email')";


    if (mysqli_query($connect, $sql)) {
        echo "Hooray! New record is inserted to database successfully. Please check database.";
    } else {
        echo "Error: " . $sql . "<br />" . mysqli_error($connect);
    }

    mysqli_close($connect);

    ?>
    <?php
    //拷贝命名为write2db_sqlio.php,数据库用mysqli 面向对象调用方法
    //print_r($_POST);

    // create a variable
    $first_name=$_POST['first_name'];
    $last_name=$_POST['last_name'];
    $department=$_POST['department'];
    $email=$_POST['email'];

    //调试用
    echo "Your input: ";
    echo $first_name;
    echo '<br />';
    echo $last_name;
    echo '<br />';
    echo $department;
    echo '<br />';
    echo $email;
    echo '<br />';


    $servername = "localhost";
    //Your database username and password
    //$username = "username";
    //$password = "password";
    $username = "tester";
    $password = "testerPassword";
    //database name
    $dbname = "test";

    $tablename ="student";



    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);


    $sql="INSERT INTO $tablename (first_name,last_name,department,email)
    VALUES('$first_name','$last_name','$department','$email')";

    if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }

    $conn->close();

    ?>
    <?php
    //拷贝为文件write2db_pdo.php,数据库用PDO调用方法

    //print_r($_POST);
    a variable
    $first_name=$_POST['first_name'];
    $last_name=$_POST['last_name'];
    $department=$_POST['department'];
    $email=$_POST['email'];

    //调试用
    echo "Your input: ";
    echo $first_name;
    echo '<br />';
    echo $last_name;
    echo '<br />';
    echo $department;
    echo '<br />';
    echo $email;
    echo '<br />';


    $servername = "localhost";
    //Your database username and password
    //$username = "username";
    //$password = "password";
    $username = "tester";
    $password = "testerPassword";
    //your database name
    $dbname = "test";

    $tablename ="student";



    // Create connection
    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql="INSERT INTO $tablename (first_name,last_name,department,email)
    VALUES('$first_name','$last_name','$department','$email')";
        // use exec() 
        $conn->exec($sql);
        echo "New record created successfully";
        }
    catch(PDOException $e)
        {
        echo $sql . "<br>" . $e->getMessage();
        }

    $conn = null;

    ?>
    --创建数据库test, 将此文件存为test.sql 导入数据库,或者手动创建表结构
    -- phpMyAdmin SQL Dump
    -- version 4.7.4
    -- https://www.phpmyadmin.net/
    --
    -- Host: 127.0.0.1:3306
    -- Generation Time: Mar 12, 2018 at 04:04 AM
    -- Server version: 5.7.19
    -- PHP Version: 7.1.9

    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
    SET time_zone = "+00:00";


    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;

    --
    -- Database: `test`
    --

    -- --------------------------------------------------------

    --
    -- Table structure for table `student`
    --

    DROP TABLE IF EXISTS `student`;
    CREATE TABLE IF NOT EXISTS `student` (
      `id` tinyint(3) UNSIGNED NOT NULL AUTO_INCREMENT,
      `first_name` varchar(20) NOT NULL,
      `last_name` varchar(20) NOT NULL,
      `department` varchar(50) NOT NULL,
      `email` varchar(50) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

    --
    -- Dumping data for table `student`
    --

    INSERT INTO `student` (`id`, `first_name`, `last_name`, `department`, `email`) VALUES
    (1, 'first1', 'last1', 'cs', '1985@qq.com');
    COMMIT;

    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
上一篇:主机localhost上不存在mysql服务 怎么办
下一篇:怎么解决mysql远程连接报10038的错误