【问题标题】:Insert PHP Arrays as MYSQL columns将 PHP 数组作为 MYSQL 列插入
【发布时间】:2015-11-11 10:35:05
【问题描述】:

我正在尝试将两个数组中的动态数组值作为列添加到 mysql 表中,一次多行。我为此创建了一个循环。
当我运行它时,它会产生一个错误,指出我的 MYSQL 语法有错误。当我尝试运行直接在 phpMyAdmin 中生成的查询语句时,它运行良好。所以语法应该不是问题。感谢您的帮助。

function addSystemDataTanks ($db, $tankNamesArray, $tankVolumesArray)
{

  global $tankNamesArray;
  global $tankVolumesArray;
  global $noOfTanks;

  $statement = "replace into tanks (TANK_NAME, TANK_VOLUME) ";
  $statement .= "values ";

  for ($i = 0; $i < $noOfTanks; $i++) {

  $statement.= "('".$tankNamesArray[$i]."', '".$tankVolumesArray[$i]."'), ";
  }
  $statement.= rtrim($statement, ',');

  $result = mysqli_query($db, $statement);


  if ($result)
  {
    return true;
  }else{
    $errno = mysqli_errno($db);
    echo "{h4}MySQL Error No: ".mysqli_errno($db)."</h4>";
      echo "{h4}MySQL Error: ".mysqli_error($db)."</h4>";
      echo "{h4}SQL: ".$statement."</h4>";
      echo "{h4}MySQL Affected Rows: ".mysqli_affected_rows($db)."</h4>";
  }
  return 'NotAdded';
}

【问题讨论】:

  • 这里执行的实际查询是什么?
  • 删除点? $statement= rtrim($statement, ',');
  • @splash58 所说的并将rtrim() 用于逗号和空格,否则它将不起作用:rtrim($statement, ' ,')。而且您可能应该使用准备好的语句来避免 sql 注入。
  • @jeroen 所说的或从$statement.= "('".$tankNamesArray[$i]."', '".$tankVolumesArray[$i]."'), "; 行中删除最后一个空格字符

标签: php mysql arrays loops


【解决方案1】:

到目前为止,我发现了两个问题:

  • 首先:你在哪里给 $noOfTanks 赋值?您的 for 循环取决于该值,但是,我没有看到它被分配,这意味着它当前导​​致 NULL,因此您的循环没有迭代。

  • 第二:这一行 $statement .= rtrim($statement, ','); 连接到原始的 $statement 变量,因此以这样的方式结束:

    'REPLACE INTO tanks (TANK_NAME, TANK_VOLUME) values REPLACE INTO tanks (TANK_NAME, TANK_VOLUME) values '
    

    我假设您想在 trim 之后重新分配,在这种情况下,请执行以下操作:

    $statement = rtrim($statement, ',');
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-10
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    相关资源
    最近更新 更多