用php获取sqlserver的表数据,读取一部分就停止读取了
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用php获取sqlserver的表数据,读取一部分就停止读取了相关的知识,希望对你有一定的参考价值。
用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);
大概是 odbc_exec 的兼容性问题 , 我使用 mysqli 局没有这个现象 以前用adodb 也处理过 30万以上的记录..
<?phprequire_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个字段写入 无压力
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";
?> 参考技术A 用php获取sqlserver的表数据,读取一部分就停止读取了:
需要转换一下类型cast(content as text) content追问
大神,为什么要转换类型呢?另外这个转换类型代码是写在哪儿的呢?
参考技术B 数据量大建议用Oracle。追问用的php,习惯性的操作mysql比较方便,另外这个问题貌似跟数据库没有关系,我写入文件中,也是只写入了一部分,并没有全部写进去
追答跟数据库没有关系
写文件只能写47662条的话,你可以使用队列。一条条慢慢写。一次性写12万条数据,服务器难免受不了。
你可以用PHP输出原表整个记录数看看count追问
原表count就是12万多,我设置set_time_limit(0);永不超时了,
追答那你只能分段运行了!
想查原因,自能一个一个的试,慢慢找了,你先不写入数据库,先取出,看看输出一个字段id,看看是不是都能取出
分析,下是写入问题还是取出问题
怎么复制sqlserver数据库里所有的表到另一个数据库中
方法有多种
备份库,还原库,还原的时候将数据库改名(表结构、数据都同步)
写脚本,可通过sys.tables获取某个库下所有表名称,然后对结果集循环遍历使用select into 语句到new table(可只同步表结构或表结构、数据都同步)
使用sqlserver自带的脚本导入导出(可只同步表结构、或表结构、数据都同步)
使用第三方插件进行导入导出(可只同步表结构或表结构、数据都同步)
以上是关于用php获取sqlserver的表数据,读取一部分就停止读取了的主要内容,如果未能解决你的问题,请参考以下文章
用php连接数据库后获取所有schema名字,为啥结果会是“Array, Array, Array, Array, Array,”