【问题标题】:mysql insert variables from foreach resultsmysql从foreach结果中插入变量
【发布时间】:2017-09-10 16:11:30
【问题描述】:

无法将 foreach 循环生成的结果插入 mysql 数据库。 我提供了 xml 文件,其中包含一些细节,这将帮助我生成下一代 url 以访问详细的产品 xml 文件。 我还在乞讨中。 这是我的代码:

<?php
$xml=simplexml_load_file("http://www.website.com/categories/xml/list.xml") or die("Error: Cannot create object");
foreach ($xml->product as $product)
{
$sql = "INSERT INTO Software (groupId,codeId)
VALUES ('$product->attributes()->groupId,$product->attributes()->codeId')";
if ($conn->query($sql) === TRUE) {
echo "info added successfully";
} else {
echo "Error inserting into table: " . $conn->error;
}
}
$conn->close(); ?>

这是我得到的错误信息:

创建表时出错:列计数与第 1 行的值计数不匹配
创建表时出错:列计数与第 1 行的值计数不匹配
创建表时出错:列计数与第 1 行的值计数不匹配

我不确定我的语法是否错误,或者我必须以某种方式为每个结果生成特定值。

提前感谢您的回答。

【问题讨论】:

  • 我正在寻找 2 天不同的解决方案,但我自己找不到任何解决问题的方法。如果你甚至可以指导我我需要寻找的东西将会有很大的帮助。我不确定如何关闭字符串。

标签: php mysql foreach insert


【解决方案1】:

你只有一个大字符串,但应该有两个。试试:

$sql = "INSERT INTO Software (groupId,codeId)
VALUES ('$product->attributes()->groupId','$product->attributes()->codeId')";

一个更好的方法将被参数化。

$sql = "INSERT INTO Software (groupId,codeId)
VALUES (?, ?)";

更容易阅读,更安全。然后你只需要bind 变量$product-&gt;attributes()-&gt;groupId$product-&gt;attributes()-&gt;codeId

这是一个粗略的例子,(is 用于整数,如果字符串更改为ss。每个变量一个字母):

$stmt = $conn->prepare($sql)
$stmt->bind_param('ii', $product->attributes()->groupId, $product->attributes()->codeId);
$stmt->execute();

您可以在此处阅读更多信息,http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

【讨论】:

  • 第一个建议部分解决了问题,但行不包含正确的结果。所有创建的行的结果如下所示: ()->groupId ()->codeId ()->groupId ()->codeId... 在测试您的下一个建议之前,我需要阅读并了解有关绑定的更多信息.谢谢!我会让你知道它是否有效。
  • 成功了吗?如果是这样,请不要忘记接受答案,meta.stackexchange.com/questions/5234/…
  • 我做了一个测试,但我不确定我是否做对了,因为我有一些 mysql 错误。还需要几天时间来学习和测试。
猜你喜欢
  • 1970-01-01
  • 2018-05-14
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
相关资源
最近更新 更多