【问题标题】:can't insert data in a mysql database using php无法使用 php 在 mysql 数据库中插入数据
【发布时间】:2014-09-20 23:39:49
【问题描述】:

首先我对 mysql 和 php 很陌生,现在我只想使用 php 在两个文本框中插入一些数据到 mysql 数据库中。

这里的数据库名称是“info”,表名称是“students”,包含三列,如 id(主键,已激活自动增量)、名称和部门。有两个文本框 txtName 和 txtDept。我希望当我按下回车按钮时,文本框的数据将被插入到 mysql 数据库中。我已经尝试了以下代码,但数据没有被插入到表中......

<html>

<form mehtod="post" action="home.php">
    <input type="text" name="txtName" />
    <input type="text" name="txtDept" />
    <input type="submit" value="Enter"/>

</form>
</html> 

<?php

$con = mysqli_connect("localhost","root","","info");
if($_POST){

    $name = $_POST['txtName'];
    $dept = $_POST['txtDept'];
    echo $name;
    mysqli_query($con,"INSERT INTO students(name,dept) VALUES($name,$dept);");


}

?>

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    发布的代码有一些问题。

    mehtod="post" 应该是 method="post" - 错字。

    另外,请引用您的价值观

    VALUES('$name','$dept')

    请使用prepared statementsPDO with prepared statements

    因为你现在的代码对SQL injection开放

    并添加error reporting

    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    

    您还应该检查数据库错误。

    $con = mysqli_connect("localhost","root","","info")   
              or die("Error " . mysqli_error($con));
    

    还有or die(mysqli_error($con))mysqli_query()


    旁注/建议:

    如果您的整个代码都在同一个文件中(看起来是),请考虑使用名为属性的提交按钮将 PHP/SQL 包装在条件语句中,否则,您可能会得到一个 @ 987654335@警告。

    为您的提交按钮命名&lt;input type="submit" name="submit" value="Enter"/&gt;

    做事

    if(isset($_POST['submit'])){ code to execute }

    设置错误报告时,仅执行if($_POST){ 可能会产生意想不到的结果。


    重写: 使用mysqli_real_escape_string()stripslashes() 增加一些安全性

    <html>
    
    <form method="post" action="home.php">
        <input type="text" name="txtName" />
        <input type="text" name="txtDept" />
        <input type="submit" name="submit" value="Enter"/>
    
    </form>
    </html> 
    
    <?php
    
    $con = mysqli_connect("localhost","root","","info")  
             or die("Error " . mysqli_error($con));
    
    if(isset($_POST['submit'])){
    
        $name = stripslashes($_POST['txtName']);
        $name = mysqli_real_escape_string($con,$_POST['txtName']);
    
        $dept = stripslashes($_POST['txtDept']);
        $dept = mysqli_real_escape_string($con,$_POST['txtDept']);
        echo $name;
    
        mysqli_query($con,"INSERT INTO `students` (`name`, `dept`) VALUES ('$name','$dept')")   
               or die(mysqli_error($con));
    
    }
    
    ?>
    

    根据手册:http://php.net/manual/en/mysqli.connect-error.php,如果您希望使用以下方法并对此进行了评论:

    <?php
    $link = @mysqli_connect('localhost', 'fake_user', 'my_password', 'my_db');
    
    if (!$link) {
        die('Connect Error: ' . mysqli_connect_error());
    }
    ?>
    

    【讨论】:

    • @VMai 我不明白。编辑,好的。
    • @VMai 好点。进行了编辑,但最后的VALUES...,当我打算把它放在mysqli_query 下时看起来有点奇怪。随意编辑:)
    • 要检查这种情况下的连接错误,您可以使用mysqli_connect_error(),因为如果出现错误$con 将是FALSEmysqli_error() 需要有效的链接标识符。
    • 不可能每次都成功。如果可以的话,我会尽量避免它。思路:用prepare、bind、execute重写为prepared statement,行不要太长。
    • 像往常一样,一个非常深入的答案。没必要留着我的。 +1
    【解决方案2】:

    上帝保佑我们... 改用 PDO 类:)。通过使用 PDO,您还可以在客户端制作准备好的语句并使用命名参数。更重要的是,如果您必须更改您的数据库驱动程序 PDO 支持大约 12 个不同的驱动程序(18 个不同的数据库!),而 MySQLi 仅支持一个驱动程序(MySQL)。 :( 就性能而言,MySQLi 大约快 2.5%,但这根本不是什么大的区别。无论如何,我的选择是 PDO :)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      相关资源
      最近更新 更多