php - mysql 从 foreach 结果中插入变量

标签 php mysql foreach insert

无法将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(); ?>

这是我收到的错误消息:

Error creating table: Column count doesn't match value count at row 1
Error creating table: Column count doesn't match value count at row 1
Error creating table: Column count doesn't match value count at row 1

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

预先感谢您的回答。

最佳答案

您只有一根大字符串,但应该有两根。尝试:

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

更好的方法是参数化。

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

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

这是一个粗略的示例,(如果字符串更改为 ss,则 i 表示整数。每个变量一个字母):

$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 .

关于php - mysql 从 foreach 结果中插入变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46142767/

相关文章:

mysql 如果不存在则创建用户

Java hibernate 异常 : could not deserialize

c++ - boost::filter_iterator 也为 end() 调用谓词?

php - CakePHP 表单垃圾邮件

php - 接收后仅适用于用户ROOT

MySQL如果第一个字符是数字

java - orderedlinkedlist JAVA统计.txt文件中的单词无重复单词加计数器>

php - 从 Firebase 云消息传递获取 "InvalidTokenFormat, Error 400"

javascript - Facebook Graph API 的替代方案 "taggable_friends"

php - 如何防止 foreach PHP 中出现重复