>  기사  >  백엔드 개발  >  TP报바운드 변수 수가 토큰 수와 일치하지 않습니다.

TP报바운드 변수 수가 토큰 수와 일치하지 않습니다.

WBOY
WBOY원래의
2016-10-09 08:32:301781검색
  • PHP 버전: PHP 5.4.16

  • ThinkPHP 버전: 3.2.3

코드로 바로 이동:

<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);

<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);을 실행하면 오류가 발생합니다.

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

단, $sql

은 mysql에서 직접 실행된다.
<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>

삽입 가능합니다.

데이터 테이블 구조

<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으로 문의하세요.