php - 为什么只有数字字段插入到我的表中?

时间:2016-06-12 17:35:15

标签: php mysql sql database mysqli

我有一个包含10个字段的HTML表单,它们都是文本输入,有1个密码输入。我从$_POST获取它们没有问题 - 只有包含数字而没有字母或空格的字段才会插入到表中,而实际文本中的字段根本不会插入。这是我用来设置表的命令:

$sql = "CREATE TABLE `basicInfo` (ID INT, type VARCHAR (100), value VARCHAR (100))";

这是我用来从数组中插入数据的命令(由$ _POST中的值组成)。

$sql = "INSERT INTO `basicInfo` (`id`, `type`, `value`) VALUES (2, \"Username:\", ".$basicInfo[1].");";

发生了什么事?

3 个答案:

答案 0 :(得分:0)

更改您的查询

  $sql = "INSERT INTO `basicInfo` (`ID`, `type`, `value`) VALUES (2, 'Username:', '".$basicInfo[1]."');";

你确定它是Username:而不是Username吗?

答案 1 :(得分:0)

结合/构建Rishi的响应,无论何时插入字符串,都应将它们用单引号括起来,这样它们就不会被错误地解释为整数或其他不需要插入引号的非字符串类型。例如,正如Rishi所说,你的SQL应该是这样的:

$sql = "INSERT INTO `basicInfo` (`ID`, `type`, `value`) VALUES (2, 'Username:', '".$basicInfo[1]."');";

或者,正如我写的那样:

$user = $basicInfo[1];
$sql = "INSERT INTO `basicInfo` (`ID`, `type`, `value`) VALUES (2, 'Username:', '$user');";

我喜欢利用PHP将变量直接插入到双引号字符串中的能力,几乎到了故障点;它更容易阅读,感觉更自然。

但是,如果您提前知道表单中的所有字段,则应创建一个将其作为列的表,而不是执行您正在执行的操作。这应该使查询更快,更容易编写,更“正确”,因为你将按照预期使用数据库(对不起,不是故意粗鲁,这只是事实)。例如:

$sql = "CREATE TABLE `basicInfo` (ID INT, username VARCHAR (100), password VARCHAR (100), otherField VARCHAR (100), etc...)";

答案 2 :(得分:0)

试试这个。

$sql = "INSERT INTO `basicInfo` (`id`, `type`, `value`) VALUES (2, \"Username:\", \"".$basicInfo[1]."\");";