Hallo
Ik ben bezig met een mailing project waarbij er vanuit verschillende soorten bestanden email adressen moeten worden kunnen opgehaald en worden geinsert in sql server 2008. Ik gebruik sqlsrv om connectie te leggen met de sql server. De webserver is IIS7.5. en de versie van php is 5.
Waar ik nu al twee volle dagen mijn kop op heb zitten breken is bij het ophalen van data uit csv bestanden.
Ik denk dat het ergens misloopt met de indeling van het csv bestand (UNICODE) dat niet compatibel is met php? Daarom al die omzettingen met met fopen_utf8 en "$val = preg_replace('/[^(\x20-\x7F)\xA0-\xFF\x08-\x0d]*/', '', $val); " enz...
voorheen dacht ik, okay, het probleem ligt aan het bestand zelf dus ik lees alles in, laat php een .txt bestandje schrijven en probeer dan van daaruit te inserten in de database maar hetzelfde probleem duikt op. Query lijkt perfect maar kan niet worden geinterpreteerd? Ik heb eigenlijk geen idee wat er fout zou kunnen zijn? ten einde raad en mijn uren voor dit "simpel" project zijn aan het oplopen.
Ik heb ook al liggen denken om een stored procedure op te roepen zodat ik php kan omzeilen maar met t_sql heb ik niet genoeg ervaring , bijvoorbeeld
Kan iemand een hint geven wat ik nog zou kunnen proberen?
Ik ben bezig met een mailing project waarbij er vanuit verschillende soorten bestanden email adressen moeten worden kunnen opgehaald en worden geinsert in sql server 2008. Ik gebruik sqlsrv om connectie te leggen met de sql server. De webserver is IIS7.5. en de versie van php is 5.
Waar ik nu al twee volle dagen mijn kop op heb zitten breken is bij het ophalen van data uit csv bestanden.
de fopen_utf8 functie:$h=fopen_utf8(get_path_file($db));
$text=fread($h,filesize(get_path_file($db)));
$values=explode('";"',$text);
foreach($values as $key=>$val){
if(check_email_address($val)){
$val = preg_replace('/[^(\x20-\x7F)\xA0-\xFF\x08-\x0d]*/', '', $val);
$val=str_replace('"','',$val);
$val=str_replace(' ','',$val);
$email=str_replace("'","''",$val);
$q="insert into verzendlijst(mailerproject_id,lijst_id,email) values('".$_SESSION['project']['id']."','".$db->queryUniqueValue("select lijst_id from lijst where naam='".$_SESSION['wizard']['bestand']."'")."','".$email."')";
//echo $q;
$db->execute($q);
}
}
Na uitvoeren krijg ik volgende query's:function fopen_utf8($filename){
$encoding='';
$handle = fopen($filename, 'r');
$bom = fread($handle, 2);
// fclose($handle);
rewind($handle);
if($bom === chr(0xff).chr(0xfe) || $bom === chr(0xfe).chr(0xff)){
// UTF16 Byte Order Mark present
$encoding = 'UTF-16';
} else {
$file_sample = fread($handle, 1000) + 'e'; //read first 1000 bytes
// + e is a workaround for mb_string bug
rewind($handle);
$encoding = mb_detect_encoding($file_sample , 'UTF-8, UTF-7, ASCII, EUC-JP,SJIS, eucJP-win, SJIS-win, JIS, ISO-2022-JP');
}
if ($encoding){
stream_filter_append($handle, 'convert.iconv.'.$encoding.'/UTF-8');
}
return ($handle);
}
Het probleem is nu dat php deze query niet kan uitvoeren maar als ik deze query copy paste naar query analyser wordt deze wel uitgevoerd.insert into verzendlijst(mailerproject_id,lijst_id,email) values('18','268',' info@jcibruxelles.be')
Ik denk dat het ergens misloopt met de indeling van het csv bestand (UNICODE) dat niet compatibel is met php? Daarom al die omzettingen met met fopen_utf8 en "$val = preg_replace('/[^(\x20-\x7F)\xA0-\xFF\x08-\x0d]*/', '', $val); " enz...
voorheen dacht ik, okay, het probleem ligt aan het bestand zelf dus ik lees alles in, laat php een .txt bestandje schrijven en probeer dan van daaruit te inserten in de database maar hetzelfde probleem duikt op. Query lijkt perfect maar kan niet worden geinterpreteerd? Ik heb eigenlijk geen idee wat er fout zou kunnen zijn? ten einde raad en mijn uren voor dit "simpel" project zijn aan het oplopen.
Ik heb ook al liggen denken om een stored procedure op te roepen zodat ik php kan omzeilen maar met t_sql heb ik niet genoeg ervaring , bijvoorbeeld
hier wordt er een syntax error gegeven , blijkbaar kan ik geen parameters mee geven in de bulk insert statement wat wel nodig is want het path naar het bestand is variabel... en dit is nog maar het beginGO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: ********
-- Create date: 19/8/2011
-- Description: inserts values from csv file into verzendlijst
-- =============================================
CREATE PROCEDURE INSERT_CSV
-- Add the parameters for the stored procedure here
@lijst_id int = 0,
@mailerproject_id int = 0,
@locatie varchar(500) = ''
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
BULK
INSERT temp_csv
FROM ' ' ' + @locatie + ' ' '
WITH
(
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n'
)
....enz

Kan iemand een hint geven wat ik nog zou kunnen proberen?