摘纪:
发现在客户的某个PHP版本下,执行某类操作的时候,总是会报如下错误 Invalid parameter number: no parameters were bound,经google,发现是php版本过低导致。
正文:
今天在处理bug的时候发现某一个很奇怪的问题,在执行某类操作的时候会报:Invalid parameter number: no parameters were bound,但是该问题在本地或是测试机上测试都没有重现,猜想是否和版本有关,于是就google了下,发现http://forum.typecho.org/topic.php?id=1501 该文的二楼说道,该问题是版本的bug,在php5.2.9以下的pdo中会出现。于是就是找了团队中另外一位同时的机子(5.2.6)做测试,果然重现该问题,他的服务器上5.2.17上测试,该问题没有出现。
在调试的时候,发现出现该类操作的时候有如下业务报以上错误:
用PDO往表nw_log(表字段一些列uid之类的,及content字段)中插入一条数据,其中content字段的内容为<a href='http://a.xxx/?tid=1'>test</a>,并且在入库之前表字段的内容会调用PDO->quote方法进行转义。在php5.2.6机子上则报如上错误,但是在5.2.17机子上表现正常。
当我仅仅只是将内容修改为http://a.xxx/?tid=1的时候,在5.2.6机子上和5.2.17机子上均表现正常,于是再次将内容格式调试为<a href=/blog_article/“http_/a.xxx/tid/1/rdquo;/gt;test/lt;/a/gt;,则5.2.6及5.2.17上均表现正常,看来是单引号惹的祸。_/p.html>
本文链接
- 首先是使用PHP Reader 读取Excle内容:
2 $file = "D:\\datas.xlsx";
3 if(!file_exists($file)){
4 die("no file found in {$file}");
5 }
6 $datasReader = PHPExcel_IOFactory::load($file);
7 $sheets = $datasReader->getAllSheets();
8 //如果有多个工作簿
9 $countSheets = count($sheets);
10 $sheetsinfo = array();
11 $sheetData = array();
12 if($countSheets==1){
13 $sheet = $sheets[0];
14 $sheetsinfo["rows"] = $sheet->getHighestRow();
15 $sheetsinfo["column"] = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn());
16 for($row=1;$row<=$sheetsinfo["rows"];$row++){
17 for($column=0;$column<$sheetsinfo["column"];$column++){
18 $sheetData[$column][$row] = $sheet->getCellByColumnAndRow($column, $row)->getValue();
19 }
20 }
21 }else{
22 foreach ($sheets as $key => $sheet)
23 {
24 $sheetsinfo[$key]["rows"] = $sheet->getHighestRow();
25 $sheetsinfo[$key]["column"] = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn());
26 for($row=1;$row<=$sheetsinfo[$key]["rows"];$row++){
27 for($column=0;$column<$sheetsinfo[$key]["column"];$column++){
28 $sheetData[$key][$column][$row] = $sheet->getCellByColumnAndRow($column, $row)->getValue();
29 }
30 }
31 }
32 }
33 echo "<pre>";
34 print_r($sheetData);
35 echo "</pre>";
注:使用PHP 读取excel文件内容,一般都是处理整理好格式的csv或者excel,也可以读取xml文件
- PHPExcel生成Exceel
$query = $this->_db->query($sql);
require_once './PHPExcel_1.7.4/Classes/PHPExcel.php';
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(15);
$objPHPExcel->getActiveSheet()->setCellValue('A1', "{$this->_packInfos['o_id']}");
$objPHPExcel->getActiveSheet()->setCellValue('B1', "Volume weight (kg)");
$objPHPExcel->getActiveSheet()->setCellValue('D1', "Actual weight (kg)");
$objPHPExcel->getActiveSheet()->setCellValue('A2', "Box No.");
$objPHPExcel->getActiveSheet()->setCellValue('B2', "P
摘纪:
发现在客户的某个PHP版本下,执行某类操作的时候,总是会报如下错误 Invalid parameter number: no parameters were bound,经google,发现是php版本过低导致。
正文:
今天在处理bug的时候发现某一个很奇怪的问题,在执行某类操作的时候会报:Invalid parameter number: no parameters were bound,但是该问题在本地或是测试机上测试都没有重现,猜想是否和版本有关,于是就google了下,发现http://forum.typecho.org/topic.php?id=1501 该文的二楼说道,该问题是版本的bug,在php5.2.9以下的pdo中会出现。于是就是找了团队中另外一位同时的机子(5.2.6)做测试,果然重现该问题,他的服务器上5.2.17上测试,该问题没有出现。
在调试的时候,发现出现该类操作的时候有如下业务报以上错误:
用PDO往表nw_log(表字段一些列uid之类的,及content字段)中插入一条数据,其中content字段的内容为<a href='http://a.xxx/?tid=1'>test</a>,并且在入库之前表字段的内容会调用PDO->quote方法进行转义。在php5.2.6机子上则报如上错误,但是在5.2.17机子上表现正常。
当我仅仅只是将内容修改为http://a.xxx/?tid=1的时候,在5.2.6机子上和5.2.17机子上均表现正常,于是再次将内容格式调试为<a href=/blog_article/“http_/a.xxx/tid/1/rdquo;/gt;test/lt;/a/gt;,则5.2.6及5.2.17上均表现正常,看来是单引号惹的祸。_/p.html>
本文链接