插入查询以插入 MySQL 数据库不起作用。 (PHP)

Posted

技术标签:

【中文标题】插入查询以插入 MySQL 数据库不起作用。 (PHP)【英文标题】:Insert query to insert into a MySQL database does not work. (PHP) 【发布时间】:2011-01-17 09:35:43 【问题描述】:

我正在尝试从 表单 插入值并将其插入 mysql 数据库。 但它不起作用。 我是初学者,请帮助。

这是我的代码:

<?php

function register()

    $name = $_POST['name'];
    $address = $_POST['address'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];
//echo $name;

$con = mysqli_connect("localhost", "root", "", "LinuxCreditSociety");
$rs = $con->query("insert into cust_mst (customer_id,customer_name,customer_address,customer_mobile,email_id)values(1003,'$name','$address','$phone','$email')");
$rs->free();
$con->close();


?>


<html>
    <head>
        <title>Registration</title>
    <link rel="stylesheet" type="text/css" href="phpcss.css"></link>
    </head>
    <body>
        <div style="position:absolute;left:300px;top:5px">
            <h1 align="center"><font face="Purisa" size="20" color="purple">Linux Credit Society</font></h1>
        </div>
        <div style="position:absolute;right:160px;top:5px"><img src="linux.jpg"  /></div>
        <div style="position:absolute;left:140px;top:5px"><img src="linux.jpg"  /></div>


    <form method="post">
        <div class="st1">
         Name:</br></br>
         Address:</br></br>
         Email-id:</br></br>
         Phone#:</br></br>
        </div>
        <div class="st2">
            <div style="position:absolute;top:5px">
                <input type="text" name="name">
            </div>
            <div style="position:absolute;top:78px">
                <input type="text" name="address"> 
            </div>
            <div style="position:absolute;top:148px">
              <input type="text" name="email">
            </div>
            <div style="position:absolute;top:218px">
                <input type="text" name="phone">
            </div>
            <div style="position:absolute;top:290px;">
            <input type="submit" value="Register">  
            </div>
        </div>
    </form>
            <div style="position:absolute;top:320px;">
                    <?php
                            if(isset($_POST['submit']) && $_POST['submit'] == "Register")
                                register();
                  ?>
            </div>
    </body>
</html>

这就是我创建数据库的方式:

create database LinuxCreditSociety;

use LinuxCreditSociety;

create table cust_mst(
customer_id int,
customer_name varchar(50),
customer_address varchar(70),
customer_mobile double,
email_id varchar(50));

insert into cust_mst values(1001, 'Jack Mathew', 'Bandra', '9998887770', 'jackm@yahoo.com');

insert into cust_mst values(1002, 'Jill Roberts', 'Dadar', '999665550', 'jillr@rediff.com');

编辑:

伙计们,我刚刚做了一个改变,谢谢你。现在我也将从事注射工作!!

这是我所做的:

我刚刚更改了呼叫 ->

    <?php
                        if(isset($_POST['submit']) && $_POST['submit'] == "Register")
                            register();
              ?>

到这个->

<?php
                                if(isset($_POST['name']) && $_POST['name'] != "")
                                    register();
                      ?>

【问题讨论】:

请解释一下什么不起作用 你能比“它不起作用”更具体吗? 您是否收到特定的错误消息? 使用 mysql_error 就像 if (!mysql_query("insert into .........", $link)) echo mysql_errno($link) . “:”。 mysql_error($link) 。 "\n"; , 链接php.net/manual/en/function.mysql-errno.php 另一件事是清理您从用户那里获得的数据,阅读有关 sql 注入的信息 【参考方案1】:

当然你想要这个反过来:

$_POST[name] = $name;
$_POST[address] = $address;
$_POST[email] = $email;
$_POST[phone] = $phone;

例如:

$name = $_POST['name'];
$address = $_POST['address'];
$email = $_POST['email'];
$phone = $_POST['phone'];

【讨论】:

即便如此,$_POST['name'] 也会比 $_POST[name] 更有意义 对不起,我现在改了。这是我的一个巨大错误。但它不起作用。【参考方案2】:

我假设您的数据来自$_POST。改变

$_POST[name] = $name;
$_POST[address] = $address;
$_POST[email] = $email;
$_POST[phone] = $phone;

进入

$name = $con->real_escape_string($_POST['name']);
$address = $con->real_escape_string($_POST['address']);
$email = $con->real_escape_string($_POST['email']);
$phone = $con->real_escape_string($_POST['phone']);

注意使用mysqli_real_escape_string() 以防止SQL injections。此外,由于您已经在使用 mysqli 扩展,请考虑构建 prepared statements 而不是将变量插入到查询字符串中。

最后一点:为防止出现“使用未定义的常量名称 - 在 /your/script 中假定为‘名称’”之类的错误通知,请使用字符串访问数组键(即 $_POST['name'] 而不是 $_POST[name])。

【讨论】:

你自己使用过准备好的语句吗?【参考方案3】:

试试这个,但别忘了清理你的变量!!!

function register()

    $name       = $_POST['name'];
    $address    = $_POST['address'];
    $phone      = $_POST['email'];
    $email      = $_POST['phone'];

    $con = new mysqli("localhost", "root", "", "LinuxCreditSociety");

    if (mysqli_connect_errno()) 
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    

    if (!$con->query("insert into cust_mst (customer_id,customer_name,customer_address,customer_mobile,email_id)values(NULL,'$name','$address','$phone','$email')")) 
        printf("Errormessage: %s\n", $con->error);
    

    $con->close();

【讨论】:

@Pavitar 将您的错误暴露给所有人的糟糕想法。应该使用 trigger_error()。【参考方案4】:
function register()

    $name       = $_POST['name'];
    $address    = $_POST['address'];
    $phone      = $_POST['email'];
    $email      = $_POST['phone'];

    $con = mysqli_connect("localhost", "root", "", "LinuxCreditSociety");
    $rs = $con->query("insert into cust_mst (customer_id,customer_name,customer_address,customer_mobile,email_id)values(NULL,'$name','$address','$phone','$email')");
    $rs->free();
    $con->close();

【讨论】:

> 还是不行。你能解释一下你为什么使用 吗?

以上是关于插入查询以插入 MySQL 数据库不起作用。 (PHP)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:按顺序插入选择

在 PHP/MySQL 插入中转义单引号不起作用

Python MySql插入不起作用

HIbernate 批量插入或更新在 Spring Boot 中不起作用

PHP- MySQL 数据库插入操作不起作用 [重复]

插入带有参数MYSQL的存储过程不起作用