Maison > développement back-end > tutoriel php > PHP上传Excel并批量添加数据到pgsql的问题,期待高人解答!

PHP上传Excel并批量添加数据到pgsql的问题,期待高人解答!

WBOY
Libérer: 2016-06-23 14:10:18
original
1211 Les gens l'ont consulté

下面这个代码的作用是上传Excel并读取其中的数据,批量添加数据到pgsql数据库中,目前已成功实现上传并将数据读出来,但是在批量插入数据时出现错误(无法执行SQL语句),但用输出的$sql的值的语句直接在pgAdminIII中运行,又是成功的。哪位大神帮助看一下,不胜感激!

<?phpinclude_once("reader.php");include_once("conn.php");$remotefilename= date("Ymdhis").".xls";if (substr($_FILES["file"]["name"],-4)==".xls"){  if ($_FILES["file"]["error"] > 0)    {    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";    }  else    {     if(move_uploaded_file($_FILES["file"]["tmp_name"],"xlstmp/" .$remotefilename)==1)	 {	    //上传成功并开始读取xls文件		$data = new Spreadsheet_Excel_Reader();        $data->setOutputEncoding('CP936');		$data->read("xlstmp/" .$remotefilename);		$count=0;		if($data->sheets[0]['numRows']>=2 && $data->sheets[0]['numCols']>=2)		{			for ($i = 2; $i <= $data->sheets[0]['numRows']; $i++)			{			$s="";			for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++)				{				if(strlen($data->sheets[0]['cells'][$i][$j])==0) break;				$s.= $data->sheets[0]['cells'][$i][$j]."|";				}			 if(strlen($s)!=0)				{				 $count++;				$ss =explode('|',$s);//将关键词以空格分割到数组中。								// $sql="INSERT INTO zikao_tzd_kecheng(\"KC_DM\",\"KC_MC\")  VALUES('1111','ok')";//执行上面这句都是可以的				 $sql="INSERT INTO zikao_tzd_kecheng(\"KC_DM\",\"KC_MC\")  VALUES('".$ss[0]."','".$ss[1]."')";//执行上面这句就不成功。				// $sql="INSERT INTO zikao_tzd_kecheng(\"KC_DM\",\"KC_MC\")  VALUES('".$data->sheets[0]['cells'][$i][1]."','".$data->sheets[0]['cells'][$i][2]."')";				 				 echo $sql."<br>";                 $result = $PG -> query($sql);				 				 }			}			echo $count."records";		}		else		 {			echo "xls's rows or columns is so few.";		 }	}	 else         echo "upload failed.";    } }else  {  echo "invalid file";  }   $PG ->close();?>
Copier après la connexion


回复讨论(解决方案)

再加30分,期待高人解答!

没有错误信息吗

错误提示就是:The database query fail
可我直接用调试时输出的$sql的值直接在pgAdminIII中执行,又是成功插入数据的。
如:INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('3708','中国近现代史纲要')
但VALUES中使用从Excel可读出来的变量又不行。

// $sql="INSERT INTO zikao_tzd_kecheng(\"KC_DM\",\"KC_MC\") VALUES('1111','ok')";
//执行上面这句都是可以成功插入的
$sql="INSERT INTO zikao_tzd_kecheng(\"KC_DM\",\"KC_MC\") VALUES('".$ss[0]."','".$ss[1]."')";
//但上面这句用变量$ss[0],$ss[1]就插入不成功,提示The database query fail

echo pg_last_error($PG); 看看

echo $sql;
贴出结果看看

这是echo $sql的结果。
INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('6029','工作分析')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('3708','中国近现代史纲要')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0112','计算机基础')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程3')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程4')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程5')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程6')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程7')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程8')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程9')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程10')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程11')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程12')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程13')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程14')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程15')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程16')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程17')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程18')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程19')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程20')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程21')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程22')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程23')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程24')
The database query fail.INSERT INTO zikao_tzd_kecheng("KC_DM","KC_MC") VALUES('0003','测试课程25')
The database query fail.

conn.php内容

<?phpinclude 'class/PGDB.php';  $PG = new pgsql("localhost", "5432", "name", "user", "pass");  $PG->connect();if(!$PG)  {  echo "无法连接到PostGreSQL数据库!";exit;} ?>
Copier après la connexion

PGDB.php内容
<?php  class pgsql {  private $linkid; // PostgreSQL连接标识符  private $host; // PostgreSQL服务器主机  private $port; // PostgreSQL服务器主机端口  private $user; // PostgreSQL用户  private $passwd; // PostgreSQL密码  private $db; // Postgresql数据库  private $result; // 查询的结果  private $querycount; // 已执行的查询总数  /* 类构造函数,用来初始化$host、$user、$passwd和$db字段。 */  function __construct($host, $port ,$db, $user, $passwd) {  $this->host = $host;  $this->port = $port;  $this->user = $user;  $this->passwd = $passwd;  $this->db = $db;  }  /* 连接Postgresql数据库 */  function connect(){  try{  $this->linkid = @pg_connect("host=$this->host port=$this->port dbname=$this->db  user=$this->user password=$this->passwd");  if (! $this->linkid)  throw new Exception("Could not connect to PostgreSQL server.");  }  catch (Exception $e) {  die($e->getMessage());  }  }  /* 执行数据库查询。 */  function query($query){  try{  $this->result = @pg_query($this->linkid,$query);  if(! $this->result)  throw new Exception("The database query fail.");  }  catch (Exception $e){  echo $e->getMessage();  }  $this->querycount++;  return $this->result;  }  /* 确定受查询所影响的行的总计。 */  function affectedRows(){  $count = @pg_affected_rows($this->linkid);  return $count;  }  /* 确定查询返回的行的总计。 */  function numRows(){  $count = @pg_num_rows($this->result);  return $count;  }  /* 将查询的结果行作为一个对象返回。 */  function fetchObject(){  $row = @pg_fetch_object($this->result);  return $row;  }  /* 将查询的结果行作为一个索引数组返回。 */  function fetchRow(){  $row = @pg_fetch_row($this->result);  return $row;  }  /* 将查询的结果行作为一个关联数组返回。 */  function fetchArray(){  $row = @pg_fetch_array($this->result);  return $row;  }  /* 返回在这个对象的生存期内执行的查询总数。这不是必须的,但是您也许会感兴趣。 */  function numQueries(){  return $this->querycount;  }  function close()	 {	 @pg_close($this->linkid);	 }}  ?>  
Copier après la connexion

你这个应该是页面编码的问题。中文可能乱码了。
mysql_query('set names utf8')

的确如lang11zi 所说,我把需要写入的字符串转化为 utf8就ok了。因为字符串是从 Excel读出来的,默认是GB2312。
谢谢以上各位的解答。散分。

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal