所以我想循环浏览2个文件(1个csv,1个asc),我想循环两个文件,以便它们都被插入到数据库中,但它不会导入它们。
这是代码:
<?php
function importdb() {
$File = 'lijst.csv';
$File2 = 'preise.asc';
$handle = fopen($File, "r");
$handle2 = fopen($File2, "r");
$arrResult = array();
$arrResult2 = array();
fgetcsv($handle);
fgetcsv($handle);
fgetcsv($handle);
fgetcsv($handle);
while(($data = fgetcsv($handle, 1000, ";")) !== FALSE || (($data2 = fgetcsv($handle2, 1000, ";"))) !== FALSE){
include('db_config.php');
$artikelnmr = $data[0];
$barcode = $data[1];
$omschrijving_nl = $data[2];
$omschrijving_exp = $data[3];
$bruto_prs = $data[4];
$staffel_prs = $data[5];
$aktie_prs = $data[6];
$bruto_antl = $data[8];
$staffel_antl = $data[9];
$aktie_aantal = $data[10];
$voorraad = $data[15];
$leverdatum = $data[16];
$besteld = $data[17];
$pallet_antl = $data[19];
$artikel_groep = $data[22];
$extra_info = $data[27];
$stmt = $db->prepare("INSERT INTO `producten`(`id`, `artikelnr`, `barcode`, `omschrijving_nl`, `omschrijving_exp`, `bruto_prijs`, `bruto_aant`, `staffel_prijs`, `staffel_aantal`, `aktie_prijs`, `aktie_aantal`, `voorraad`, `leverdatum`, `besteld`, `pallet_aantal`, `artikel_groep`, `extra`)
VALUES ('', :artikelnmr,:barcode,:omschrijving_nl,:omschrijving_exp,:bruto_prijs,:bruto_aantal,:staffel_prijs,:staffel_aantal,:aktie_prijs,:aktie_aantal,:voorraad,:leverdatum,:besteld,:pallet_aantal,:artikel_groep,:extra)");
$stmt->bindParam(":artikelnmr", $artikelnmr);
$stmt->bindParam(":barcode", $barcode);
$stmt->bindParam(":omschrijving_nl", $omschrijving_nl);
$stmt->bindParam(":omschrijving_exp", $omschrijving_exp);
$stmt->bindParam(":bruto_prijs", $bruto_prs);
$stmt->bindParam(":bruto_aantal", $bruto_antl);
$stmt->bindParam(":staffel_aantal", $staffel_antl);
$stmt->bindParam(":staffel_prijs", $staffel_prs);
$stmt->bindParam(":aktie_aantal", $aktie_aantal);
$stmt->bindParam(":aktie_prijs", $aktie_prs);
$stmt->bindParam(":voorraad", $voorraad);
$stmt->bindParam(":leverdatum", $leverdatum);
$stmt->bindParam(":besteld", $besteld);
$stmt->bindParam(":pallet_aantal", $pallet_antl);
$stmt->bindParam(":artikel_groep", $artikel_groep);
$stmt->bindParam(":extra", $extra_info);
$stmt->execute();
$stmt2 = $db->prepare("INSERT INTO `prijzen`(`artikelnr`, `prijs_soort`, `prijs1`, `prijs2`, `prijs3`, `prijs4`, `prijs5`) VALUES (:artikelnmr, :soort, :prijs1, :prijs2, :prijs3, :prijs4, :prijs5)");
$type = $data2[0];
$artikel = $artikelnmr;
$prijs1 = $data2[6];
$prijs2 = $data2[7];
$prijs3 = $data2[8];
$prijs4 = $data2[9];
$prijs5 = $data2[10];
$stmt2->bindParam("artikelnmr", $artikel);
$stmt2->bindParam(":soort", $type);
$stmt2->bindParam(":prijs1", $prijs1);
$stmt2->bindParam(":prijs2", $prijs2);
$stmt2->bindParam(":prijs3", $prijs3);
$stmt2->bindParam(":prijs4", $prijs4);
$stmt2->bindParam(":prijs5", $prijs5);
$stmt2->execute();
}
fclose($handle);
fclose($handle2);
}
importdb();
?>
当我运行代码时,它会返回此错误:
致命错误:未捕获的异常&#39; PDOException&#39;消息&#39; SQLSTATE [23000]:完整性约束违规:1048列&#39; prijs_soort&#39;不能为空&#39;在/home/ubuntu/workspace/import.php:65堆栈跟踪:#0 /home/ubuntu/workspace/import.php(65):PDOStatement-&gt; execute()#1 / home / ubuntu / workspace / import。 php(71):importdb()#2 {main}在第65行的/home/ubuntu/workspace/import.php中抛出
答案 0 :(得分:1)
替换'||'与'&amp;&amp;'在条件下。
发生此错误是因为其中一个文件已完成,但另一个文件已完成但条件仍为真,因为其中一个'或 - 条件'为真。要使代码生效,您需要两个条件都是真的。
答案 1 :(得分:0)
这可能对您有用,也可能不对您有用,但在处理PDO语句时,我发现以下函数对于帮助调试很有用。
function debugpdo( $sql, $sqlparams ){
$a=$b=array();
foreach( $sqlparams as $key => $value ){
$a[]="set @".str_replace(':','',$key)."='".$value."';";
$b[]=str_replace(':','@',$key );
}
echo '<pre>';
echo implode( PHP_EOL, $a ) . str_repeat( PHP_EOL, 1 );
echo str_replace( array_keys( $sqlparams ), $b, $sql );
echo '</pre>';
}
$sql='insert into `prijzen`( `artikelnr`, `prijs_soort`, `prijs1`, `prijs2`, `prijs3`, `prijs4`, `prijs5` ) values ( :artikelnmr, :soort, :prijs1, :prijs2, :prijs3, :prijs4, :prijs5 )';
$sqlparams=array(
":artikelnmr" => $artikel,
":soort" => $type,
":prijs1" => $prijs1,
":prijs2" => $prijs2,
":prijs3" => $prijs3,
":prijs4" => $prijs4,
":prijs5" => $prijs5
);
/* copy the output and run in gui app */
debugpdo( $sql, $sqlparams );
$sql="insert into `producten`(`id`, `artikelnr`, `barcode`, `omschrijving_nl`, `omschrijving_exp`, `bruto_prijs`, `bruto_aant`, `staffel_prijs`, `staffel_aantal`, `aktie_prijs`, `aktie_aantal`, `voorraad`, `leverdatum`, `besteld`, `pallet_aantal`, `artikel_groep`, `extra`)
values ('', :artikelnmr,:barcode,:omschrijving_nl,:omschrijving_exp,:bruto_prijs,:bruto_aantal,:staffel_prijs,:staffel_aantal,:aktie_prijs,:aktie_aantal,:voorraad,:leverdatum,:besteld,:pallet_aantal,:artikel_groep,:extra)";
$sqlparams=array(
':artikelnmr' => $artikelnmr,
':barcode' => $barcode,
':omschrijving_nl' => $omschrijving_nl,
':omschrijving_exp' => $omschrijving_exp,
':bruto_prijs' => $bruto_prs,
':bruto_aantal' => $bruto_antl,
':staffel_aantal' => $staffel_antl,
':staffel_prijs' => $staffel_prs,
':aktie_aantal' => $aktie_aantal,
':aktie_prijs' => $aktie_prs,
':voorraad' => $voorraad,
':leverdatum' => $leverdatum,
':besteld' => $besteld,
':pallet_aantal' => $pallet_antl,
':artikel_groep' => $artikel_groep,
':extra' => $extra_info
);
debugpdo( $sql, $sqlparams );
然后我尝试直接在mysql客户端中运行带有关联变量的sql语句(在我的情况下通常是Heidi)
我意识到你没有数组形式的sql参数,但这可能有助于调试。