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

由于php7.0以后,废除了很多函数,现在度娘出来的都是错误的。

<!--表单文件,拷入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', '[email protected]');
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 */;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-03-21
<?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融合铸造数据库插入之剑

本回答被网友采纳
相似回答