【问题标题】:What is the proper way to insert data into database?将数据插入数据库的正确方法是什么?
【发布时间】:2020-05-15 14:44:36
【问题描述】:

从 php 我正在尝试使用 INSERT 查询插入一个数组。我收到错误消息:

检查数据库连接列计数与第 1 行的值计数不匹配。

我不熟悉这种类型的插入,也不熟悉使用 implode。请帮助某种类型的解决方案。我的表格列是

IaasForm_id (PK), From_id(FK), roleApp, os, vCPU, Memory, val, Performance, HighWrite, fwconfig, transIn, transOut, bkUp

和sql

$sql = "INSERT INTO FORM(From_id, roleApp, os, vCPU, Memory, val, 
        Performance, HighWrite, fwconfig, transIn, transOut, bkUp) 
        VALUES ((SELECT MAX(Form_id) FROM FORM ), '" . implode("','", $array[$i]) . "','" . $hw . "','" . $_POST[ 'fwconfig' ] . "','" . $_POST[ 'transIn' ] . "','" . $_POST[ 'transOut' ] . "','" . $_POST[ 'bkUp' ] . "')";

【问题讨论】:

  • 请使用准备好的语句。这对 SQL 注入开放,更改为语句可能解决您看到的问题。
  • 我只需要知道如何在带有额外列的插入语句中使用内爆。可能查看示例和最佳方式
  • 请在插入数据库之前进行内爆。像这样 - $implode = implode(" ",$array[$i]);并将 $implode 变量传递给查询

标签: php mysql


【解决方案1】:

您不应该以这种方式将数据插入数据库。这是非常古老的插入数据方式。现在有一种优雅的方式可以非常有效地完成 sql 作业。最佳实践总是得到所有人的认可并被广泛使用。

看一个非常简单的例子,你应该如何做到这一点:

<?php

$host = "localhost";
$username = "your_db_username";
$password = "your_db_password";
$dbname = "your_db_name";

try {
    $conn = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);

    // Sets the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Prepares sql with PDO's PDO::prepare() method
    $sql = "INSERT INTO FORM(From_id, roleApp, os, vCPU, Memory, val, Performance, HighWrite, fwconfig, transIn, transOut, bkUp)
VALUES ((SELECT MAX(Form_id) FROM FORM), :roleApp, :os, :vCPU, :Memory, :val, :Performance, :HighWrite, :fwconfig, :transIn, :transOut, :bkUp)";
    $stmt = $conn->prepare($sql);

    // Prepares data
    $data = [
      ':roleApp' => 'value',
      ':os' => 'value',
      ':vCPU' => 'value',
      ':Memory' => 'value',
      ':val' => 'value',
      ':Performance' => 'value',
      ':HighWrite' => 'value',
      ':fwconfig' => 'value',
      ':transIn' => 'value',
      ':transOut' => 'value',
      ':bkUp' => 'value',
    ];

    // Inserts row into table
    $stmt->execute($data);

} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}
$conn = null;

我希望这能帮助你理解。编码愉快!

【讨论】:

  • 谢谢先生和社区。我非常感谢您的建议和教导。这对我帮助很大。
  • @NigelCharles 不客气!顺便说一句,如果对您有帮助,请将答案标记为正确。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
  • 2011-06-08
  • 1970-01-01
相关资源
最近更新 更多