为什么不将此MySQL查询保存

时间:2015-03-06 13:11:34

标签: php mysql

所以我有这个简短的剧本。它没有发出任何错误,但它不会保存到数据库中。运行脚本后,我检查数据库,没有任何内容。

db只有两个项目。 (id和fid)ID设置为INT 11 auto,fid设置为VARCHAR 64.此外,我正好连接到我的数据库。

<?php

$con = mysqli_connect('####', '####', '####', '#####');
if (mysqli_connect_errno()) {
    echo 'Failed to Connect to MySQL' . mysqli_connect_errno();
}

if (isset($_POST['submit'])) {
    $fid = $_POST['fid'];

    $query = mysqli_query($con, "SELECT * FROM fid where fid = '$fid'");
    $row = mysqli_num_rows($query);

    if ($row == 1) {
        echo 'This Federal Tax ID is already in use.';
    } else {
        mysqli_query($con, "INSERT INTO `fid` (id, fid) VALUES ('', '$fid')");
    }
}

?>

2 个答案:

答案 0 :(得分:3)

根据您的评论:

  

它应该是一个空值,因此ID auto会每次递增。

这不是自动增量的工作原理。您的代码明确告诉记录有值:

"INSERT INTO `fid` (id, fid) VALUES ('', '$fid')"

如果需要id列,则预计会失败。 (它也可能因类型而失败。您正在尝试插入字符串,但自动增量列将是数字...)

不需要为自动增量列提供空值。完全省略它:

"INSERT INTO `fid` (fid) VALUES ('$fid')"

此外,此代码 对SQL注入开放 。你想要read up on that。简而言之,您应该使用绑定到用户输入值的预准备语句。不要将这些用户输入值直接连接到代码中,这样可以让用户注入自己的代码。

答案 1 :(得分:0)

如果你想使用AUTO,你需要根本不指定值,或者指定0(如果定义为NOT NULL,则为NULL):

要么

INSERT INTO fid (fid) VALUES ('$fid')

INSERT INTO fid (id, fid) VALUES (0, '$fid')

或(如果id定义为NOT NULL

INSERT INTO fid (id, fid) VALUES (NULL, '$fid')

消息来源:http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

相关问题