Max*_*Max 9 php sql-server csv str-replace
以下是我正在使用的PHP代码
$file_handle = fopen("products.csv", "r");
$fname = "products.csv";
$fhandle = fopen($fname,"r");
$content = fread($fhandle,filesize($fname));
$server = "**\******,1433";
$connectionInfo = array( "Database"=>"******", "UID"=>"***", "PWD"=>"*******" );
$conn = sqlsrv_connect( $server, $connectionInfo );
if( $conn === false ) {
die( print_r( sqlsrv_errors(), true));
}
while (!feof($file_handle) ) {
$line_of_text = fgetcsv($file_handle, 1024);
$itemco = $line_of_text[0];
$sql = "SELECT quantity FROM Item WHERE itemlookupcode = '$itemco' ";
$stmt = sqlsrv_query( $conn, $sql );
if( $stmt === false) {
die( print_r( sqlsrv_errors(), true) );
}
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
$icc = $row['quantity'];
$content = str_replace("$line_of_text[1]", "$icc", "$content");
}
}
$fhandle = fopen($fname,"w");
fwrite($fhandle,$content);
fclose($fhandle);
Run Code Online (Sandbox Code Playgroud)
str_replace 在以下实例中不起作用:
$content = str_replace("$line_of_text[1]", "$icc", "$content");
Run Code Online (Sandbox Code Playgroud)
首先,您打开同一个文件三次,只关闭一次。这不是一个主要问题,但你确实应该养成完成/关闭你开始的事情的习惯。fopen您可以使用以下命令跳过其中之一file_get_contents:
$content = file_get_contents("products.csv");
Run Code Online (Sandbox Code Playgroud)
现在,str_replace将替换字符串的每个出现位置。例如,如果 $line_of_text[1]是“11”并且$icc是“9”,则文件中的其他值(例如“110”)将受到影响,从而使未来替换的其余值在每个循环中越来越不可靠。
如果我没有记错的话,您想要做的就是替换每行中的一个单元格,这里有一个建议:创建一个空变量,比方说$new_content
现在,改变你的循环:
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
$line_of_text[1] = $row['quantity']; // change cell value
$new_content .= implode(',', $line_of_text).','; // convert into string with extra
// ',' to avoid merging cells
}
$new_content = trim($new_content, ','); // remove extra ','
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
642 次 |
| 最近记录: |