PHP MYSQL - 在不使用列名但使用自动增量字段的情况下插入
Posted
技术标签:
【中文标题】PHP MYSQL - 在不使用列名但使用自动增量字段的情况下插入【英文标题】:PHP MYSQL - Insert into without using column names but with autoincrement field 【发布时间】:2010-12-24 16:29:56 【问题描述】:我需要在 mysql 表中插入一个包含 32 个字段的长行。
我想做这样的事情:
$sql="insert into tblname values (... 32 fields ...)";
如果字段的顺序与 MySQL 表字段的顺序相同,显然它可以正常工作。但是,我的表有一个自动递增的 id 作为它的第一个字段。
我想要填写除第一个(id)之外的所有表名。
建议?
【问题讨论】:
【参考方案1】:只需使用NULL
作为您的第一个值,autoincrement
字段仍将按预期工作:
INSERT INTO tblname VALUES (NULL, ... 32 Fields ... )
【讨论】:
非常好。我还找到了一个替代解决方案,如下所示: $resultx = mysql_query("SHOW TABLE STATUS LIKE 'diretorio'"); $auto_incr_val = mysql_result($resultx, 0, 'Auto_increment'); @Paulo:你不知道这样做会给自己带来什么麻烦。使用 NULL - 这是 MySQL 设计的工作方式。 一般情况下使用 0 来触发 auto_increment 是没问题的,除非你开启 NO_AUTO_VALUE_ON_ZERO 模式。 NULL、0 和 DEFAULT 都是触发此事件的可接受值。请参阅dev.mysql.com/doc/refman/5.6/en/… 了解更多信息。 类似地,NULL 可用于定义了默认值的其他列,例如CURRENT_TIMESTAMP。 这个 null 方法对我不起作用。我不知道为什么?【参考方案2】:在自动增量字段中插入NULL
。
我建议您使用字段名称,除非这是一个 hack 脚本。基本原理是,如果您向表中添加字段或更改其顺序,您的代码将中断。
相反,使用明确的字段名称,将来会更好。
【讨论】:
【参考方案3】:当我们在插入查询中尝试不使用列名时,我们应该省略任何列值,
如果以上信息有误请指教。
【讨论】:
【参考方案4】:这是我用过的一个很棒的快捷方式(感谢为我写的朋友)
$fieldlist=$vallist='';
foreach ($_POST as $key => $value)
$fieldlist.=$key.',';
$vallist.='\''.urlencode($value).'\',';
$fieldlist=substr($fieldlist, 0, -1);
$vallist=substr($vallist, 0, -1);
$sql='INSERT INTO customer_info ('.$fieldlist.') VALUES ('.$vallist.')';
【讨论】:
此代码易受 SQL 注入攻击。请在此处阅读更多信息:***.com/questions/11939226/… @IliaRostovtsev - 虽然我同意你的观点并已切换到 PDO 以避免 SQL 注入,但我觉得回答与发布的代码有关的问题是有好处的 是的,可能。还值得一提的是可能存在的问题。 (我没有投反对票,以防万一)以上是关于PHP MYSQL - 在不使用列名但使用自动增量字段的情况下插入的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server,如何在不丢失数据的情况下创建表后设置自动增量?