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 - 在不使用列名但使用自动增量字段的情况下插入的主要内容,如果未能解决你的问题,请参考以下文章

为mysql表设置自动增量初始值

如何在php中添加自动增量主键

为啥 MySQL 增加自动增量,但不插入行?

SQL Server,如何在不丢失数据的情况下创建表后设置自动增量?

如何避免将表单发送的数据关联到具有自动增量唯一 ID 的 MySQL 数据库中的可能冲突?

MySQL 后端和访问 (.accdb, 2013) 前端自动增量问题