表单正在提交,但 $id 变量的行为异常,而 $part 变量的行为符合预期。
第一个 if 语句完美运行,但其余所有语句将提交 $part 变量,同时将 $id 变量设置为“0”。知道会发生什么吗?
<?php
$part = $_POST['participating'];
$form = $_POST['forms'];
$meth = $_POST['method'];
$id = $_POST['id'];
if ($meth == "Forms - Foo") {
$sql="INSERT INTO form_foo (id, participants, forms)
VALUES ('$id', '$part', '$form')";
$result = mysql_query($sql);
} else if ($meth=="Forms - Other") {
$sql="INSERT INTO form_other (id, participants)
VALUES ('$id', '$part')";
$result = mysql_query($sql);
} else if ($meth=="Online - Foo") {
$sql="INSERT INTO online_foo (id, participants)
VALUES ('$id', '$part')";
$result = mysql_query($sql);
} else {
$sql="INSERT INTO online_other (id, participants)
VALUES ('$id', '$part')";
$result = mysql_query($sql);
}
?>
最佳答案
问:有任何线索可能会发生什么吗?
答:了解正在发生的情况的一种方法是在调用 mysql_query
之前输出 $sql
的内容。
简单的 echo、vardump、printf 是获取提交到数据库的实际 SQL 的一种方法。从那里,这将帮助您确定问题是在构建 SQL 语句的上游,还是在数据库中执行语句的下游。
此外,检查 mysql_query
的返回也是一个好主意。如果 MySQL 发生错误,则返回 FALSE。还有一个 mysql_error
函数可以返回最后一个 MySQL 错误的文本。
只是在这里猜测,但对您所观察到的行为最可能的解释是,$id
变量的内容以数字字符以外的内容开头。 MySQL 尝试从字符串文字的前导部分获取数字。并且空字符串在数字上下文中将计算为零,请考虑:
SELECT '2b3c' + 0 => 2
SELECT 'a1b2' + 0 => 0
SELECT '' + 0 => 0
if
语句不太可能导致问题;除了为 $sql
变量赋值之外,我们没有看到任何赋值操作。您发布的 if
block 只有一个条件测试。
如果提交的 SQL 文本看起来合理,例如... VALUES ('456','foo')
,那么我们需要仔细查看数据库。 (例如,是否有人创建了包含 SET NEW.id = 0;
的 BEFORE INSERT
触发器?列 id
是否声明为 INT
,而您期望它是 VARCHAR
。我们只是猜测。
此外,当 SQL 文本中包含“不安全”值时,您可能需要考虑 SQL 注入(inject)漏洞。 mysql
接口(interface)提供了 mysql_real_escape_string
函数,可以很好地将“不安全”值变为“安全”以包含在 SQL 语句中。
关于php - 提交到MySQL,但if语句导致问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25733415/