用php获取sqlserver的表数据,读取一部分就停止读取了
用php获取sqlserver的表数据,大概有12万条,我读取的是整个表,为什么每次都只执行了47662条就不执行了;之前写的是每获取一条就插入到我自己的mysql数据表...
用php获取sqlserver的表数据,大概有12万条,我读取的是整个表,为什么每次都只执行了47662条就不执行了;之前写的是每获取一条就插入到我自己的mysql数据表,发现只有47662条,以为是mysql的原因,就写入到文件中,发现同业也只执行了47662次。重申下,数据确实有12万条,因为我用desc和asc两种排序都获取了下,分别都获取到了47662次,没有重复,这是什么原因呢?主要代码如下(sql插入是一样的问题):
$sql="select * from user order by id asc";
$exec=odbc_exec($link,$sql);
/*以上为sql语句和执行sql语句*/
//以读写方式打开data.txt文件
$fp = fopen('data.txt', 'a+');
//创建自增变量
$index=1;
//row是上面写好的odbc读取sqlserver数据库,循环读取每条数据
while ($row =odbc_fetch_array($exec)) {
$str="";
//循环读取每条数据中的每个字段
foreach ($row as $key => $value) {
//清除字段中的空白符并替换掉其中的单引号,并在每个字段后加逗号
$str.="'".str_replace("'", "", trim($value))."', ";
}
//清楚每行数据两边空白,并去掉该行数据最后一个逗号(前面为循环变量,统计id)
$str=$index++.",".rtrim(rtrim($str), ',')."{n}";
//写入文件
fwrite($fp, $str);
}
fclose($fp); 展开
$sql="select * from user order by id asc";
$exec=odbc_exec($link,$sql);
/*以上为sql语句和执行sql语句*/
//以读写方式打开data.txt文件
$fp = fopen('data.txt', 'a+');
//创建自增变量
$index=1;
//row是上面写好的odbc读取sqlserver数据库,循环读取每条数据
while ($row =odbc_fetch_array($exec)) {
$str="";
//循环读取每条数据中的每个字段
foreach ($row as $key => $value) {
//清除字段中的空白符并替换掉其中的单引号,并在每个字段后加逗号
$str.="'".str_replace("'", "", trim($value))."', ";
}
//清楚每行数据两边空白,并去掉该行数据最后一个逗号(前面为循环变量,统计id)
$str=$index++.",".rtrim(rtrim($str), ',')."{n}";
//写入文件
fwrite($fp, $str);
}
fclose($fp); 展开
展开全部
大概是 odbc_exec 的兼容性问题慎高搏 , 我使用 mysqli 局没有这个现象 以前用adodb 也处理过 30万以上的记录..
<?php
require_once('php/json/mysqli_dbset.php');
/* $valstr="";
for ( $i=1;$i<120000;$i++){
$valstr.="(0,'name".$i."'),";
}
$valstr.="(0,'name120000')"念世;
$sql_str="insert into tttt values $valstr";
$rs=$mysqli->query($sql_str);
echo "insert ok"; */
$sql_str="宽祥select * from tttt";
$rs=$mysqli->query($sql_str);
while($row = $rs->fetch_array(MYSQL_ASSOC)){
echo $row['iname'].'</br>';
}
?>
追问
我单独获取id这一列写入到文件是没有问题的,这个表有130列,实际有数据的列大概有六七列,获取所有的数据,写入文件就执行不了所有了
追答
你先用mysqli 测试一下, 或者把表发过来 帮你测试一下...
我这边用13个字段写入 无压力
<?php
require_once('php/json/mysqli_dbset.php');
//echo $sql_str;
$sql_str="select * from tttt";
$ssss="";
$rs=$mysqli->query($sql_str);
while($row = $rs->fetch_array(MYSQL_ASSOC)){
$ssss.= $row['id']."-" .$row['iname1']."-".$row['iname2']."-".$row['iname3']."-".$row['iname4']."-".$row['iname5']."-".$row['iname6']."-";
$ssss.= $row['iname7']."-".$row['iname8']."-".$row['iname9']."-".$row['iname10']."-".$row['iname11']."-".$row['iname12']."-";
$ssss.= $row['iname13'].'{\n}';
}
$fp = fopen('data.txt', 'a+');
fwrite($fp, $ssss);
fclose($fp);
echo "ok";
?>
2017-03-22 · 知道合伙人互联网行家
关注
展开全部
用php获迟简取sqlserver的表数据,读取一部分就停止读取了:
需要码拆裤转换御宏一下类型cast(content as text) content
需要码拆裤转换御宏一下类型cast(content as text) content
追问
大神,为什么要转换类型呢?另外这个转换类型代码是写在哪儿的呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
数据量大建议用Oracle。
追问
用的php,习惯性的操作mysql比较方便,另外这个问题貌似跟数据库没有关系,我写入文件中,也是只写入了一部分,并没有全部写进去
追答
跟数据库没有关系
写文件只能写47662条的话,你可以使用队列。一条条慢慢写。一次性写12万条数据,服务器难免受不了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
也有可能数宴数袜据库连接超时了.都不建议进行晌激大量操作.
你可以用PHP输出原表整个记录数看毕搏看count
你可以用PHP输出原表整个记录数看毕搏看count
更多追问追答
追问
原表count就是12万多,我设置set_time_limit(0);永不超时了,
追答
那你只能分段运行了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询