php - 无法在 MySQL 数据库中插入表单数据

标签 php mysql

我正在使用以下 php 脚本在我的 MySQL 数据库中插入数据。但是没有插入任何行。当我在 phpmyadmin 中运行相同的 sql 查询时,它工作正常。

<?php

if(isset($_POST['submit']) && isset($_POST['Pnr']) && isset($_POST['Mobile']))

{
    $hostname = "";
    $username = "";
    $password = "";
    $Pnr = $_POST['Pnr'];
    $Mobile = $_POST['Mobile'];

    $con = mysql_connect($hostname,$username,$password);

if(!$con)
{
    die("Could not connect to Database");
}

    mysql_select_db("freepnra_userinfo",$con);

    $sql = "INSERT INTO users (pnr,mobile) VALUES ('$Pnr','$Mobile')";

    mysql_query($sql) or die("insertion error");
}

?>  

最佳答案

我不完全确定它不起作用的真正原因是什么,但我怀疑是 SQL 查询嵌套或已弃用的 MySQL 数据库扩展存在问题。

我测试了以下代码,对我来说似乎工作完美。

<?php
    if (isset($_POST['submit']) && isset($_POST['Pnr']) && isset($_POST['Mobile'])) {
        $hostname = "";
        $username = "";
        $password = "";
        $database = "freepnra_userinfo";
        $Pnr = $_POST['Pnr'];
        $Mobile = $_POST['Mobile'];

        $con = mysqli_connect($hostname, $username, $password, $database);

        if (mysqli_connect_errno()) {
            die("<p>Could not connect to database with the credentials passed in (" . mysqli_connect_errno() . ": " . mysqli_connect_error() . ").");
            exit(1);
        }

        $Pnr = preg_replace("/[^0-9-]/", "", $Pnr);
        $Mobile = preg_replace("/[^0-9-]/", "", $Mobile);
        $sql = "INSERT INTO `users` (`pnr`, `mobile`) VALUES (?, ?)";

        if ($stmt = mysqli_prepare($con, $sql)) {
            mysqli_stmt_bind_param($stmt, "ss", $Pnr, $Mobile);
            mysqli_stmt_execute($stmt);
            mysqli_stmt_close($stmt);
        }

        mysqli_close($con);
    }
?>

我所做的是嵌套表名、列名,并且不是将变量值直接放入查询中,而是放置了双撇号。

我也切换到了MySQLi database extension而不是你的deprecated MySQL 。另外,我想警告您一个非常严重的SQL injection问题,我通过使用准备好的语句和一些额外的 preg_replace 函数解决了这个问题,只是为了将所有不需要的字符排除在查询和表之外。我不完全确定这些值应该包含什么,所以我继续假设您想要两个不同的电话号码(这就是为什么我只允许从 0 到 9 的数字和破折号)。

此外,我建议您阅读以下 Material ,了解一些更好的方法来保护您的查询免受潜在 SQL 注入(inject)的影响:

我强烈建议切换到 MySQL PDO如果可能的话。我认为它非常简单、容易,而且效果更好!

希望这对您有所帮助!

关于php - 无法在 MySQL 数据库中插入表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22022228/

相关文章:

java - 从移动设备到服务器的强大文件传输

mysql - 检查最新的 id 并添加 1

php - 选择 * 但没有包含 "This"的结果

javascript - 传递给 Chart.js 的 PHP 字符串数据渲染不佳

php - joomla - 在一个模型中运行多个查询

php - 向/从 MySQL 数据库插入/查看图像

php -\\x80-\\xFF 指的是什么?

mysql - 比较数据库中不同表的 2 列

MySQL INSERT INTO 语句

mysql_fetch_array (MYSQL)