首页 > 后端开发 > php教程 > TP报number of bound variables does not match number of tokens

TP报number of bound variables does not match number of tokens

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2016-10-09 08:32:30
原创
1890 人浏览过
  • PHP版本:PHP 5.4.16

  • ThinkPHP版本:3.2.3

直接上代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<code>$data:

 

Array

(

    [area] => aa

    [brand] => bb

    [color] => cc

    [type] => 通勤车

    [alerted_police] => 0

    [status] => 0

    [lost_time] =>

    [info] => dd

    [email] => email@email.com

    [update_time] =>

    [timestamp] => 1

    [img_info_id] => 201610081621501801716297

)</code>

登录后复制

$sql = $ReportLost->fetchSql(true)->add($data);

1

<code>INSERT INTO `report_lost` (`area`,`brand`,`color`,`type`,`alerted_police`,`status`,`lost_time`,`info`,`email`,`update_time`) VALUES ('aa','bb','cc','通勤车','0','0',NULL,'dd','email@email.com',NULL)</code>

登录后复制

接下来执行$result = $ReportLost->add($data);就会报错:

1

<code>ERR: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens</code>

登录后复制

然而在mysql中直接执行$sql中的

1

2

<code>mysql> INSERT INTO `report_lost` (`area`,`brand`,`color`,`type`,`alerted_police`,`status`,`lost_time`,`info`,`email`,`update_time`) VALUES ('aa','bb','cc','通勤车','0','0',NULL,'dd','email@email.com',NULL);

Query OK, 1 row affected (0.02 sec)</code>

登录后复制

是可以插入的。

数据表结构

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<code>-- 表的结构 `report_lost`

--

 

CREATE TABLE IF NOT EXISTS `report_lost` (

  `id` int(11) NOT NULL,

  `title` varchar(80) CHARACTER SET utf8mb4 DEFAULT NULL,

  `keyword` varchar(100) CHARACTER SET utf8mb4 DEFAULT NULL,

  `area` varchar(50) CHARACTER SET utf8mb4 DEFAULT NULL,

  `brand` varchar(20) CHARACTER SET utf8mb4 DEFAULT NULL,

  `sub_brand` varchar(20) CHARACTER SET utf8mb4 DEFAULT NULL,

  `color` varchar(20) CHARACTER SET utf8mb4 NOT NULL,

  `type` varchar(20) CHARACTER SET utf8mb4 NOT NULL,

  `alerted_police` int(4) NOT NULL DEFAULT '0',

  `status` int(4) NOT NULL DEFAULT '0',

  `info` text CHARACTER SET utf8mb4,

  `image` text CHARACTER SET utf8mb4,

  `user` varchar(50) CHARACTER SET utf8mb4 DEFAULT NULL,

  `email` varchar(50) CHARACTER SET utf8mb4 NOT NULL,

  `contact` varchar(50) CHARACTER SET utf8mb4 DEFAULT NULL,

  `descrpition` text CHARACTER SET utf8mb4,

  `uuid` varchar(36) CHARACTER SET utf8mb4 DEFAULT '00000000-0000-0000-0000-000000000000',

  `lost_time` timestamp NULL DEFAULT NULL,

  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,

  `update_time` timestamp NULL DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;</code>

登录后复制

表中的字段的确比$data中的要多,但是在$data中未定义的都可以NULL。

这是thinkphp的限制吗?或是php的限制?有什么解决办法,我需要在$data中把所有mysql需要的字段都先定义了吗?

相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板