用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万以上的记录..

<?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";
?>

参考技术A 用php获取sqlserver的表数据,读取一部分就停止读取了:
需要转换一下类型cast(content as text) content追问

大神,为什么要转换类型呢?另外这个转换类型代码是写在哪儿的呢?

参考技术B 数据量大建议用Oracle。追问

用的php,习惯性的操作mysql比较方便,另外这个问题貌似跟数据库没有关系,我写入文件中,也是只写入了一部分,并没有全部写进去

追答

跟数据库没有关系
写文件只能写47662条的话,你可以使用队列。一条条慢慢写。一次性写12万条数据,服务器难免受不了。

本回答被提问者采纳
参考技术C 也有可能数据库连接超时了.都不建议进行大量操作.
你可以用PHP输出原表整个记录数看看count追问

原表count就是12万多,我设置set_time_limit(0);永不超时了,

追答

那你只能分段运行了!

想查原因,自能一个一个的试,慢慢找了,你先不写入数据库,先取出,看看输出一个字段id,看看是不是都能取出

分析,下是写入问题还是取出问题

怎么复制sqlserver数据库里所有的表到另一个数据库中

方法有多种

    备份库,还原库,还原的时候将数据库改名(表结构、数据都同步)

    写脚本,可通过sys.tables获取某个库下所有表名称,然后对结果集循环遍历使用select into 语句到new table(可只同步表结构或表结构、数据都同步)

    使用sqlserver自带的脚本导入导出(可只同步表结构、或表结构、数据都同步)

    使用第三方插件进行导入导出(可只同步表结构或表结构、数据都同步)

参考技术A 先导出来,然后再导入 参考技术B 备份一下,还原的时候改一下名字

以上是关于用php获取sqlserver的表数据,读取一部分就停止读取了的主要内容,如果未能解决你的问题,请参考以下文章

如何查看数据库中的表?

sql 读取数组问题

用php连接数据库后获取所有schema名字,为啥结果会是“Array, Array, Array, Array, Array,”

从 SQL Server 插入一些数据的表中读取数据的问题

实用案例 - SqlServer数据库数据无法读取解决方法

读取位于 LINUX 服务器上的文本文件并更新 SQL Server 数据库中的表