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

时间:2014-02-25 17:53:40

标签: 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");
}

?>  

3 个答案:

答案 0 :(得分:1)

我不完全确定它不起作用的实际原因是什么,但我怀疑是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和破折号的数字)。

此外,我想请您阅读以下材料,以了解一些更好的方法来保护您的查询以防止潜在的SQL注入:

如果可能,我强烈建议您切换到MySQL PDO。在我看来,它非常简单,容易并且效果更好!

希望这能帮到你!

答案 1 :(得分:0)

因为你的第一个if没有else语句,如果它没有评估为true,你无意知道发生了什么。在脚本末尾添加else语句:

else {
echo 'problem with post data';
}

另外,给自己一个巨大的优势并阅读有关PDO的内容。它有一种方法可以使用预先设定的fetch模式来覆盖我所说的mysqli,并且你可以使用预先构建的获取模式做很多事情。假设$PDO是有效的PDO连接,该单行将为您提供多维关联数组中表中的所有行:

$rows = $PDO->query('SELECT * FROM table JOIN table2 USING (id)')->fetchAll(PDO::FETCH_ASSOC);

你可以用foreach迭代。耦合在一起,fetchAll和foreach将在while ($row = mysqli_fetch_assoc())

上获得大量时间
foreach ($rows as $row) {
 // do whatever with your cool array of values
}

答案 2 :(得分:-1)

我认为您需要将查询编写为

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