PHP-Version: PHP 5.4.16
ThinkPHP-Version: 3.2.3
Gehe direkt zum Code:
<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>
Die nächste Ausführung von $result = $ReportLost->add($data);
führt zu einem Fehler:
<code>ERR: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens</code>
Allerdings wird $sql
in
<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>
kann eingefügt werden.
Datentabellenstruktur
<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>
Es gibt tatsächlich mehr Felder in der Tabelle als in $data, aber alle undefinierten Felder in $data können NULL sein.
Ist das eine Einschränkung von thinkphp? Oder ist es eine Einschränkung von PHP? Gibt es eine Lösung? Muss ich zuerst alle von MySQL benötigten Felder in $data definieren?