PHP上传Excel并批量添加数据到pgsql的问题,期待高人解答!
下面这个代码的作用是上传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();?>
回复讨论(解决方案)
再加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;} ?>
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); }} ?>
你这个应该是页面编码的问题。中文可能乱码了。
mysql_query('set names utf8')
的确如lang11zi 所说,我把需要写入的字符串转化为 utf8就ok了。因为字符串是从 Excel读出来的,默认是GB2312。
谢谢以上各位的解答。散分。

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

Session hijacking can be achieved through the following steps: 1. Obtain the session ID, 2. Use the session ID, 3. Keep the session active. The methods to prevent session hijacking in PHP include: 1. Use the session_regenerate_id() function to regenerate the session ID, 2. Store session data through the database, 3. Ensure that all session data is transmitted through HTTPS.

RESTAPI design principles include resource definition, URI design, HTTP method usage, status code usage, version control, and HATEOAS. 1. Resources should be represented by nouns and maintained at a hierarchy. 2. HTTP methods should conform to their semantics, such as GET is used to obtain resources. 3. The status code should be used correctly, such as 404 means that the resource does not exist. 4. Version control can be implemented through URI or header. 5. HATEOAS boots client operations through links in response.

In PHP, exception handling is achieved through the try, catch, finally, and throw keywords. 1) The try block surrounds the code that may throw exceptions; 2) The catch block handles exceptions; 3) Finally block ensures that the code is always executed; 4) throw is used to manually throw exceptions. These mechanisms help improve the robustness and maintainability of your code.

The main function of anonymous classes in PHP is to create one-time objects. 1. Anonymous classes allow classes without names to be directly defined in the code, which is suitable for temporary requirements. 2. They can inherit classes or implement interfaces to increase flexibility. 3. Pay attention to performance and code readability when using it, and avoid repeatedly defining the same anonymous classes.

In PHP, the difference between include, require, include_once, require_once is: 1) include generates a warning and continues to execute, 2) require generates a fatal error and stops execution, 3) include_once and require_once prevent repeated inclusions. The choice of these functions depends on the importance of the file and whether it is necessary to prevent duplicate inclusion. Rational use can improve the readability and maintainability of the code.

There are four main error types in PHP: 1.Notice: the slightest, will not interrupt the program, such as accessing undefined variables; 2. Warning: serious than Notice, will not terminate the program, such as containing no files; 3. FatalError: the most serious, will terminate the program, such as calling no function; 4. ParseError: syntax error, will prevent the program from being executed, such as forgetting to add the end tag.

PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.
