我
认为
那是我的问题。我建立了一个MySQL连接,读取了一个XML文件,然后通过循环遍历元素将这些值插入到表中。问题是,有时我会插入2、3或4,而不是只插入1条记录。这似乎取决于我以前读过的值。我想我正在重新初始化变量,但我想我遗漏了一些东西——希望是一些简单的东西。
这是我的密码。最初我有大约20个专栏,但是我缩短了包含的版本以便于阅读。
$ctr = 0;
$sql = "insert into csd (id,type,nickname,hostname,username,password) ".
"values (?,?,?,?,?,?)";
$cur = $db->prepare($sql);
for ($ctr = 0; $ctr < $expected_count; $ctr++) {
unset($bind_vars,$dat);
$lbl = "csd_{$ctr}";
$dat['type'] = (string) $ref->itm->csds->$lbl->type;
$dat['nickname'] = (string) $ref->itm->csds->$lbl->nickname;
$dat['hostname'] = (string) $ref->itm->csds->$lbl->hostname;
$dat['username'] = (string) $ref->itm->csds->$lbl->username;
$dat['password'] = (string) $ref->itm->csds->$lbl->password;
$bind_vars = array( $id,$dat['$type'], $dat['$nickname'], $dat['$hostname'],
$dat['$username'], $dat['$password']);
print_r ($bind_vars);
$res = $db->execute($cur, $bind_vars);
}
另外,我还标记了这个simpleXML,因为这就是我读取文件的方式,尽管上面没有包含该代码。看起来是这样的:
$ref = simplexml_load_file($file);
更新
:我已经根据建议更改了周围的代码,现在它并不总是相同的模式,但它也同样被破坏。当我在插入之前显示绑定数组时,它看起来像这样。请注意,我还对前后的行进行计数,因此有0行,然后插入1,然后插入2:
0 CSDs on that ITEM now.
Array
(
[0] => 2
[1] => 0
[2] =>
[3] => X
[4] => XYZ
[5] =>
[6] =>
[7] =>
[8] => audio
[9] =>
[10] => 192.168.0.50
[11] => 192.168.0.3
[12] => 255.255.255.0
[13] => 255.255.255.0
[14] =>
[15] =>
[16] =>
[17] => 21
[18] => 5
[19] => Y
[20] => /dir
)
2 CSDs on that ITEM now.