【问题标题】:mysql: 1 INSERT INTO query two resultmysql: 1 INSERT INTO 查询两个结果
【发布时间】:2013-12-24 14:59:39
【问题描述】:

我有一个表用户(id VARCHAR(5),名称 VARCHAR(30))

我以两种方式使用 INSERT INTO 查询:

1) 直接:

...
$sql="INSERT INTO user (id,name) VALUES ('00001','abcd');
...

---> 结果:id(00001), name(abcd).

这是正确的结果。

2) 按功能:

function insert($id,$name)
{
    $sql="INSERT INTO user (id,name) VALUES ($id,$name)";
    ....
}

我使用这个函数有两种参数 一)

insert('00001','00123');

---> 结果:id(1), name(123)(所有的零都被删掉了)。

b)

insert('00001','abcd');

--->错误:Unknown column 'abcd' in 'field list'.

我想问:为什么所有的零都被剪掉了,为什么当我使用字符串值时会出错。如何修复它以按功能获得正确的结果。 非常感谢!

【问题讨论】:

  • 除了手头的问题.. 为什么要使用 varchar 作为 ID 列?为什么不只使用整数、自动增量?然后你也不必担心重复。
  • 您必须在查询中使用单引号 (')... $sql="INSERT INTO user (id,name) VALUES ('$id', '$name')";

标签: php mysql mysqli


【解决方案1】:

你从不费心引用你的价值观:

INSERT INTO user (id,name) VALUES ($id,$name)
                                   ^^^^^^^^^---here

所以查询变成了

INSERT INTO user (id, name) VALUES (1, abcd)

没有引号,abcd 被视为字段名称,而不是值。由于您的表没有名为 abcd 的字段,因此您会收到错误消息。试试:

INSERT INTO user (id,name) VALUES ($id, '$name')

作为短期修复(注意$name 周围的' 引号)。长期修复:开始使用准备好的语句和/或占位符,这样就不需要这种引用了。

【讨论】:

  • "编辑必须是 6 个字符"...这很愚蠢。要解决前导零剥离问题,请在 $id 周围加上引号。
  • 无论如何使用零填充和非整数 id 字段非常愚蠢。无论如何,在查询数据以进行显示时,可以轻松地重新应用填充。
  • 同意,但我们不知道 OP 的要求。也许其他人坚持 ID 字段是一个字符串。
  • 这正是我想要的。非常感谢!
猜你喜欢
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 2016-07-27
  • 2017-02-15
  • 1970-01-01
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多