INSERT INTO 语句不会正确插入特定值?
INSERT INTO statement won't insert a specific value correctly?
我正在尝试在 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 方法的表单中获取了正确的值,这不是问题所在。正确插入所有内容直到最后一个值都没有问题,这应该是我数据库中 bands
table 中名为 band_bio
的最后一列。它也不会输出任何错误或任何东西。这几乎就像它从变量中获取字符串数据并在插入信息之前删除所有文本一样。
我已经在这个网站上工作了几个星期,并且在其他页面上以完全相同的方式使用了 INSERT INTO 语句,并且效果很好。这是真正难倒我的第一件事,我想不通。感谢任何帮助。
插入时,请确保您的 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 会是 "left off"。您会收到列不匹配错误。
我自己完全找到了答案!事实上,这是一个语法错误。
if (($band_name === "") OR ($genre === "") OR ($band_photo === "") OR ($band_bio = ""))
变量 $band_bio
被分配给 if 语句中的空字符串,因为我不小心使用了赋值运算符而不是比较运算符。所以正确的代码需要是 $band_bio === ""
而不是 $band_bio = ""
。
我发誓,问题总是比您想象的要简单得多。
我正在尝试在 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 方法的表单中获取了正确的值,这不是问题所在。正确插入所有内容直到最后一个值都没有问题,这应该是我数据库中 bands
table 中名为 band_bio
的最后一列。它也不会输出任何错误或任何东西。这几乎就像它从变量中获取字符串数据并在插入信息之前删除所有文本一样。
我已经在这个网站上工作了几个星期,并且在其他页面上以完全相同的方式使用了 INSERT INTO 语句,并且效果很好。这是真正难倒我的第一件事,我想不通。感谢任何帮助。
插入时,请确保您的 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 会是 "left off"。您会收到列不匹配错误。
我自己完全找到了答案!事实上,这是一个语法错误。
if (($band_name === "") OR ($genre === "") OR ($band_photo === "") OR ($band_bio = ""))
变量 $band_bio
被分配给 if 语句中的空字符串,因为我不小心使用了赋值运算符而不是比较运算符。所以正确的代码需要是 $band_bio === ""
而不是 $band_bio = ""
。
我发誓,问题总是比您想象的要简单得多。