【问题标题】:syntax for MySQL INSERT with an array of columns带有列数组的 MySQL INSERT 语法
【发布时间】:2012-07-09 21:13:06
【问题描述】:

我是 PHP 和 MySQL 查询构造的新手。我有一个大型处理器。一些字段是必需的,大多数字段是用户可选的。在我的例子中,HTML id 和 MySQL 列名是相同的。我找到了有关使用数组将 $_POST 转换为 INSERT INTO 的字段和值的教程,但我无法让它们工作 - 很多小时后。我已经退后一步,使用数组和变量制作了一个非常简单的 INSERT,但我仍然很难过。以下行有效并将 5 个项目插入到具有 100 多列的数据库中。前4项为字符串,第5项monthlyRental为整数。

$query = "INSERT INTO `$table` (country, stateProvince, city3, city3Geocode, monthlyRental) VALUES ( '$country', '$stateProvince', '$city3', '$city3Geocode', '$monthlyRental')";

当我为字段创建一个数组并使用它时,如下:

$colsx = array('country,', 'stateProvince,', 'city3,', 'city3Geocode,', 'monthlyRental');
$query = "INSERT INTO `$table` ('$colsx') VALUES ( '$country', '$stateProvince', '$city3', '$city3Geocode', '$monthlyRental')";

我收到一个 MySQL 错误 - 请查看与您的 MySQL 服务器版本相对应的手册,以了解在 ''Array' 附近使用的正确语法) VALUES ('US', 'New York', 'Fairport, Monroe County, New York ', '(43.09)' 在第 1 行。无论数组项在单引号内是否有逗号,我都会收到此错误。我已经阅读了大量内容并尝试了很多组合,但我无法得到它。我想要在我回到 foreach 表达式来处理 $_POST 之前,在小范围内查看正确的语法,并且字段和值都是数组。是的,我知道我应该使用 mysql_real_escape_string,但这是 foreach 的一个简单的后续步骤。最后,一些关于值数组语法的线索会很有帮助,特别是如果它与字段数组不同。我知道我需要添加一个 null 作为第一个数组项来触发 MySQL 自动增量 ID。还有什么?

我是新手,所以请具体一点。

【问题讨论】:

    标签: php mysql


    【解决方案1】:
    $query = "INSERT INTO `$table` ('$colsx') etc...
    

    不会工作。 $colsx 是一个数组,所以你最终要产生的是字面意思

    $query = "INSERT INTO `sometable` ('Array')
                                        ^^^^^---yes, it'll literally say "Array"
    

    在执行此操作之前,您必须将数组预处理为字符串,例如

    $colsx = array(...);
    $col_string = implode(',', $colsx);
    $query = "INSERT INTO `$table` ($col_string) etc...";
    

    【讨论】:

    • 非常感谢。我还必须从数组语句中删除逗号,因为 implode 会这样做。效果很好。现在我可以继续下一个学习机会了。我学到的主要内容是 PHP 中类型定义的重要性。我来自 Javascript。
    • 在大多数情况下,PHP 在类型转换/转换方面非常出色,但数组是它不知道该怎么做的一个地方,因为实际上有无数种方法可以将数组转换为字符串,所以它只是简单地说所有数组都是字符串形式的“数组”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2014-11-29
    • 2013-04-16
    • 2012-10-26
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多