我已成功插入数据库,但它没有插入任何内容,我实际上没有更改代码。
可能是什么原因?
while ($row = mysql_fetch_array($new_entries)){
$anzeigen_id = $row[0];
$firma_id = $row[1];
$xml_filename = "xml/".$anzeigen_id.".xml";
$dom = new DOMDocument();
$dom->load($xml_filename);
$value = $dom->getElementsByTagName('FormattedPositionDescription');
foreach($value as $v){
$text = $v->getElementsByTagName('Value');
foreach($text as $t){
$anzeige_txt = $t->nodeValue;
$anzeige_txt = utf8_decode($anzeige_txt);
$sql = "INSERT INTO testing (`firmen_id`,`anzeige_id`,`anzeige_txt`) VALUES ('$firma_id','$anzeigen_id','$anzeige_txt')";
$sql_inserted = mysql_query($sql);
if($sql_inserted){
echo "'$anzeigen_id' from $xml_filename inserted<br />";
}
}
}
}
答案 0 :(得分:1)
好吧,我会发一个答案,因为问一些代码示例会更清楚等等。
首先,当你遇到这样一个无法解释的案例时:你应该调试!
在您的情况下,您在查询成功时显示一条消息。但如果查询失败怎么办?您应该处理错误消息以查看正在发生的事情。这样的事情:
if($sql_inserted)
{
echo "'$anzeigen_id' from $xml_filename inserted<br />";
}
else
{
throw new Exception(mysql_error() . '. SQL: '.$sql);
}
查询失败时会出现异常。您将收到错误消息(mysql_error()
)和失败的查询($sql
)。
可能存在的问题是,您没有逃避查询中的值。因此,如果变量中有'
,它将破坏查询。你应该逃避他们:
$firma_id = mysql_real_escape_string($firma_id);
$anzeigen_id = mysql_real_escape_string($anzeigen_id);
$anzeige_txt = mysql_real_escape_string($anzeige_txt);
所以你将得到这样的最终代码:
foreach($text as $t)
{
$firma_id = mysql_real_escape_string($firma_id);
$anzeigen_id = mysql_real_escape_string($anzeigen_id);
$anzeige_txt = mysql_real_escape_string(utf8_decode($t->nodeValue));
$sql = "INSERT INTO testing (`firmen_id`,`anzeige_id`,`anzeige_txt`) VALUES ('$firma_id','$anzeigen_id','$anzeige_txt')";
$sql_inserted = mysql_query($sql);
if($sql_inserted)
{
echo "'$anzeigen_id' from $xml_filename inserted<br />";
}
else
{
throw new Exception(mysql_error() . '. SQL: '.$sql);
}
}
顺便说一下,就像我告诉你please, don't use mysql_*
functions in new code一样。它们不再被维护,deprecation process已经开始了。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
答案 1 :(得分:1)
它无效的原因是您无法清理输入。考虑:
$anzeigen_id = mysql_real_escape_string($row[0]);
$firma_id = mysql_real_escape_string($row[1]);
....
$anzeige_txt = mysql_real_escape_string(utf8_decode($t->nodeValue));
您应该了解SQL注入的风险以及如何预防它。
您还应该在代码中进行适当的错误检查。
答案 2 :(得分:0)
试试这个......
$sql = "";
$comma = "";
while ($row = mysql_fetch_array($new_entries)){
$anzeigen_id = $row[0];
$firma_id = $row[1];
$xml_filename = "xml/".$anzeigen_id.".xml";
$dom = new DOMDocument();
$dom->load($xml_filename);
$value = $dom->getElementsByTagName('FormattedPositionDescription');
foreach($value as $v){
$text = $v->getElementsByTagName('Value');
foreach($text as $t){
$anzeige_txt = $t->nodeValue;
$anzeige_txt = utf8_decode($anzeige_txt);
$sql .= "$comma ('$firma_id','$anzeigen_id','$anzeige_txt')";
$comma = ", ";
}
}
}
$sql = "INSERT INTO testing (`firmen_id`,`anzeige_id`,`anzeige_txt`) VALUES $sql";
$sql_inserted = mysql_query($sql);