INSERT INTO语句是否无法正确插入特定值?

时间:2016-12-06 21:13:38

标签: php mysql sql innodb mariadb

我正在尝试在php中使用INSERT INTO SQL语句。它将正确输入所有内容,直到最后一个值($bands_bio)。它没有输入正确的信息,而是将值留空。我查看了所有内容,但似乎无法找到任何语法错误。

$page_title = "Create a new band";

require ('includes/database.php');
require_once 'includes/bandsHeader.php';

$band_name = $conn->real_escape_string(trim(filter_input(INPUT_GET, 'band_name', FILTER_SANITIZE_STRING)));
$band_photo = $conn->real_escape_string(trim(filter_input(INPUT_GET, 'band_photo', FILTER_SANITIZE_STRING)));
$genre = $conn->real_escape_string(trim(filter_input(INPUT_GET, 'genre', FILTER_SANITIZE_STRING)));
$band_bio = $conn->real_escape_string(trim(filter_input(INPUT_GET, 'band_bio', FILTER_SANITIZE_STRING)));

echo $band_bio;

if (($band_name === "") OR ($genre === "") OR ($band_photo === "") OR ($band_bio = "")) {
    $errno = $conn->errno;
    $errmsg = $conn->error;
    echo "<div id='contentWrapper'>";
    echo "<div class='contentBox'>";
    echo "Insertion failed with: ($errno) $errmsg<br/>\n";
    echo "</div></div>";
    $conn->close();
    include 'includes/searchFooter.php';
    exit;
}

$albums = 0;

$sql = "INSERT INTO bands VALUES (NULL, '$band_name', '$genre', '$albums', '$band_bio')";

$query = @$conn->query($sql);

if (!$query) {
    $errno = $conn->errno;
    $errmsg = $conn->error;
    echo "<div id='contentWrapper'>";
    echo "<div class='contentBox'>";
    echo "Insertion failed with: ($errno) $errmsg<br/>\n";
    echo "</div></div>";
    $conn->close();
    include 'includes/footer.php';
    exit;
}

正如您所看到的,我回显了$band_bio,以便查看它是否从我使用GET方法的表单中获得正确的值,这样就不会出现问题。在最后一个值之前正确插入所有内容都没有问题,该值应该是我数据库中band_bio表中最后一列bands。它也不会输出任何错误或任何错误。它几乎就像从变量中获取字符串数据并在插入信息之前删除所有文本一样。

我已经在这个网站上工作了几个星期,并且在其他页面上以完全相同的方式使用了INSERT INTO语句,它运行得很好。这是第一件真正困扰我的事情,我无法弄明白。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

插入时,请确保将pk(id)字段设置为自动递增。 这样,您可以对查询施加更多控制。你应该更成功:

$sql = "INSERT INTO bands "
 . "(`band_name`,`genre`,`numof_albums`,`band_bio`) "
 . "VALUES ('$band_name', '$genre', '$albums', '$band_bio')";

如果不指定pk字段,INNODB将自动递增并为您插入。

您的想法是要指定要插入的列。依靠mysql的列排序很好,但在你的情况下可能会有一些东西在发挥作用。

没有理由认为band_bio会“停止”。您会收到列不匹配错误。

答案 1 :(得分:0)

我自己完全找到了答案!事实上,它是一个语法错误。

if (($band_name === "") OR ($genre === "") OR ($band_photo === "") OR ($band_bio = ""))

变量$band_bio被分配给if语句中的空字符串,因为我不小心使用了赋值运算符而不是比较运算符。因此,正确的代码必须是$band_bio === ""而不是$band_bio = ""

我发誓,问题总是比你想象的要简单得多。